2010-09-14 6 views
5

Quiero pasar un objeto de cadena en una vista:ASP.NET MVC Un problema con el paso de un objeto cadena en Ver

<%@ 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> 

Cuando intento esto:

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

se produce el error

: No se encontró la vista 'SomeView' o su principal.

pero, cuando cambio el retorno a

return View("SomeView"); 

todo funciona bien. Entonces, ¿cómo pasar esa cadena?

Respuesta

4

Uso ViewData para esto. En el controlador, basta con establecer el par clave/valor:

ViewData["Foo"] = "bar"; 

Luego, en su opinión, sólo el acceso que al igual que lo haces con lo anteriormente:

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

El problema que estaba teniendo es que los 2 parámetros del método View() son: Ver nombre y Nombre principal.

+0

+1 esto funcionará. Tenga en cuenta que el OP aún puede hacerlo como él quería, vea mi respuesta. – eglasius

+3

ViewData [loosegooseybag] rara vez es la respuesta. .. –

+0

@Wyatt: de hecho, pero parece que funcionó para el OP. Sin embargo, tiene curiosidad por obtener un voto negativo para la respuesta directa. : | No para sugerir que eras tú. Cómo puede obtener un -1 por ser una respuesta aceptada es desconcertante. –

2

Si está dentro de su "SomeView" método de acción:

return View("StringToPass"); 

Si está dentro de un método de acción diferente:

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

EDITAR supongo que la opción 1 no lo hará trabajar con una cuerda. Nunca lo he probado b/c que siempre uso ViewModels:

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

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

Luego lo haría

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

esto está mal, el primero buscará la vista StringToPass, y No creo que lo último funcione ... solo vi la edición -> definitivamente puedes pasar una cadena a la vista sin un ViewModel. – eglasius

+0

RedirecttoAction funciona suponiendo que tiene un método de acción que toma la cadena x. Con ViewModel, mis casos son más complejos que simplemente configurar la cadena. – RememberME

+0

sí, no significaba que parecía que no me gusta ver modelos, definitivamente los uso, pero definitivamente puede pasar un valor de cadena simple como modelo si lo desea. – eglasius

2

La clase View tiene un constructor de vista ("cadena1", "cadena2") donde cadena1 es el nombre de la vista y cadena2 es el nombre de la página maestra. El problema es que está pasando en dos cadenas por lo que supone que quiere llamar a ese método sobrecargado.

3

¿qué pasa con

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

su confundirla con otra sobrecarga de visión(), no:

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

vieja pregunta, pero voy a dar un ejemplo de cómo pasar a la cadena de Ver usando un modelo (sin usar Viewbag que ya ha sido respondido)

// 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() 
Cuestiones relacionadas