2010-09-14 6 views
5

voglio passare un oggetto stringa in un Vista:ASP.NET MVC Un problema con il superamento di un oggetto stringa in vista

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<String>" %> 

    <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> 

      <h2><%=Model %></h2> 

    </asp:Content> 

Quando provo questo:

return View("SomeView", "stringToPass"); 

si verifica l'errore: La vista 'SomeView' o il suo master non è stata trovata.

ma, quando cambio il ritorno alla

return View("SomeView"); 

tutto funziona bene. Quindi, come passare quella stringa?

risposta

4

Usa Viewdata per questo. Nel controller, è sufficiente impostare la coppia chiave/valore:

ViewData["Foo"] = "bar"; 

Poi, nel tuo Vista, basta accedervi proprio come ci si imposta in precedenza:

<h2><%=ViewData["Foo"]%></h2> 

Il problema si stavano avendo è che i parametri del metodo View() sono: Visualizza nome e Nome master.

+0

+1 funzionerà. Nota che l'OP può ancora farlo come voleva, vedere la mia risposta. – eglasius

+3

ViewData [loosegooseybag] è così raramente la risposta. .. –

+0

@Wyatt: in effetti, ma sembra che abbia funzionato per l'OP. Curioso di ottenere un downvote per la semplice risposta però. : | Non per suggerirti che eri tu. Come potrebbe ottenere un -1 per essere una risposta accettata è sconcertante. –

2

Se siete all'interno del vostro metodo di azione "SomeView":

return View("StringToPass"); 

Se sei all'interno di un diverso metodo di azione:

return RedirectToAction("SomeView", new { x = "StringToPass" }); 

EDIT immagino l'opzione 1 non lo farà lavorare con una stringa. Non ho mai provato b/c io uso sempre ViewModels:

public class UserAdminViewModel 
    { 
     public string UserName { get; private set; } 

     public UserAdminViewModel(string userName) 
     { 
      UserName = userName; 
     } 
    } 

Poi si farebbe

return View(new UserAdminViewModel("StringToPass")); 
+0

questo è errato, il primo cercherà la vista StringToPass e Non credo che il futuro funzionerebbe ... ho appena visto la modifica -> puoi sicuramente passare una stringa alla vista senza ViewModel. – eglasius

+0

RedirecttoAction funziona assumendo che si disponga di un metodo di azione che assuma la stringa x. Con ViewModel, le mie custodie sono più complesse della semplice impostazione della stringa. – RememberME

+0

sì, non significa che sembra che non mi piacciono i modelli di vista, li uso sicuramente, ma puoi certamente passare un valore stringa semplice come modello se vuoi. – eglasius

2

La classe View ha un costruttore di View ("stringa1", "stringa2") dove stringa1 è il nome della vista e stringa2 è il nome della pagina master. Il problema è che stai passando in due stringhe, quindi supponiamo che tu voglia chiamare questo metodo sovraccarico.

3

che dire

ViewData.Model = "StringToPass"; 
return View("SomeView"); 
11

sua confusione con un altro overload di View(), non:

return View("SomeView", (object)"stringToPass"); 
0

vecchia questione, ma io dare un esempio di come passare stringa al Visualizza utilizzando un modello (non utilizzando Viewbag a cui è già stata data una risposta)

// Action Method inside controller 
    public ActionResult Index() 
    { 
     string msg = "Hello World"; 
     return View("Index","",msg); // notice the blank second parameter 
    } 

    // This goes inside the Index View 
    // Will print, The Message is: Hello World 
    The Message is: @Model.ToString() 
Problemi correlati