Pregunta

vi la ViewBag en MVC 3. ¿Es tan diferente a ViewData en MVC 2?

¿Fue útil?

Solución

Se utiliza la característica dinámica C # 4.0. Se logra el mismo objetivo que viewdata y debe evitarse en favor del uso de modelos de vista inflexible de tipos (del mismo modo que viewdata deben ser evitados).

Así que, básicamente, que reemplaza cuerdas mágicas

ViewData["Foo"]

por propiedades mágicas

ViewBag.Foo

para el que no tiene la seguridad de tiempo de compilación.

continúo culpar Microsoft para introducir nunca este concepto en MVC.

El nombre de las propiedades son mayúsculas y minúsculas.

Otros consejos

Internamente ViewBag propiedades se almacenan como pares de nombre / valor en el ViewData diccionario .

Nota: en la mayoría de las versiones preliminares de MVC 3, la propiedad ViewBag fue nombrado el modelo de vista como se ha señalado en este fragmento de MVC 3 notas de la versión:

(editado 08/10/12) Se sugirió que publico la fuente de esta información que he publicado, aquí está la fuente: http://www.asp.net/whitepapers/mvc3-release-notes#_Toc2_4

MVC 2 controladores apoyan una ViewData propiedad que le permite pasar datos a una plantilla de vista utilizando una tarde-bound API diccionario. En MVC 3, también puede utilizar la sintaxis algo más sencilla con el ViewBag propiedad para llevar a cabo la mismo propósito. Por ejemplo, en lugar de escrito ViewData [ "mensaje"] = "text", puede escribir ViewBag.Message = "text". No es necesario definir cualquier clases para usar el tipo fuerte ViewBag propiedad. Porque es un propiedad dinámica, en su lugar puede simplemente obtener o establecer propiedades y lo hará resolverlos de forma dinámica en tiempo de ejecución. Internamente, propiedades ViewBag son almacenados como pares de nombre / valor en el diccionario ViewData. (Nota: en la mayoría Pre-Release versiones de MVC 3, la ViewBag propiedad fue nombrado el ViewModel propiedad.)

ViewBag vs ViewData en MVC

http://royalarun.blogspot.in/ 2013/08 / viewbag-viewdata-TempData-y-view.html

Las similitudes entre ViewBag y ViewData:

Ayuda a mantener los datos cuando se mueve desde el controlador a la vista. Acostumbrado a pasar los datos de controlador a vista correspondiente. medios de vida cortos valor será nulo cuando se produce la redirección. Esto se debe a su objetivo es proporcionar una forma de comunicarse entre controladores y vistas. Sus un mecanismo de comunicación dentro de la llamada al servidor.

Diferencia entre ViewBag y ViewData:

ViewData es un diccionario de objetos que se deriva de ViewDataDictionary clase y el uso de cadenas como claves de acceso. ViewBag es una propiedad dinámica que aprovecha las ventajas de las nuevas características dinámicas en C # 4.0. ViewData requiere typecasting para el tipo de datos complejo y comprobar si hay valores nulos a error evitar. ViewBag no requiere typecasting para el tipo de datos complejo.

ViewBag y ViewData Ejemplo:

public ActionResult Index()
{   
    ViewBag.Name = "Arun Prakash";   
    return View();
}

public ActionResult Index()
{  
    ViewData["Name"] = "Arun Prakash";  
    return View();
}   

Llamada en Vista

@ViewBag.Name    
@ViewData["Name"]

ViewData :. Requiere tipo de colada para tipos de datos complejos y los controles para los valores nulos a errores Evita

ViewBag . No requiere la conversión de tipos de tipos de datos complejos

Consideremos el siguiente ejemplo:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var emp = new Employee
        {
            EmpID=101,
            Name = "Deepak",
            Salary = 35000,
            Address = "Delhi"
        };

        ViewData["emp"] = emp;
        ViewBag.Employee = emp;

        return View(); 
    }
}

Y el código de View es el siguiente:

@model MyProject.Models.EmpModel;
@{ 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
 ViewBag.Title = "Welcome to Home Page";
 var viewDataEmployee = ViewData["emp"] as Employee; //need type casting
}

<h2>Welcome to Home Page</h2>
This Year Best Employee is!
<h4>@ViewBag.Employee.Name</h4>
<h3>@viewDataEmployee.Name</h3>

Todas las respuestas sugieren que ViewBag y / o ViewData es para pasar datos desde Controller a Views que es errónea. ambos son muy útiles para pasar datos de Vistas a la presentación o parcial de los criterios (o ViewComponents, etc.) Es exclusivo no controlador.

como la muestra asp.net por defecto tiene esto en la página de diseño:

<title>@ViewData["Title"] - MyApp</title>

y en cualquier vista

ViewData["Title"] = "Details";

Así pues, a la pregunta: "¿cuál es la diferencia entre ViewBag y ViewData"

La diferencia más notable es ViewData es un diccionario fuertemente con tipo, mientras ViewBag es un tipo dinámico.

Nota que el interior de datos ES EL MISMO

ViewData["Title"] = "MyTitle";
ViewBag.Title; // returns "MyTitle";

Cuando usar uno u otro?

  • ViewBag no admite nombres no válidos C #. No puede tener acceso ViewData["Key With Space"] con ViewBag
  • ViewBag.Something es dinámica y puede que tenga problemas cuando se llama a métodos (como los métodos de extensión) que necesita conocer el parámetro exacto en tiempo de compilación.
  • ViewBag puede comprobar si hay valores nulos limpiador sintáctica: ViewBag.Person?.Name
  • ViewData tener todas las propiedades de un diccionario como ContainsKey, Add, etc para que pueda utilizar Mantener ViewData.Add("somekey", "somevalue") en cuenta que podría lanzar excepciones.
  • Uso ViewData en vistas necesita Encasillamiento mientras ViewBag no lo hacen.

Conocer las diferencias sutiles, utilizando una u otra es mucho más una preferencia de sabor.

Normalmente se puede pensar en ViewBag.AnyKey a un alias de ViewData["AnyKey"]

¿Puedo recomendar a usted a no utilizar cualquiera?

Si se desea transmitir datos "Enviar" para su pantalla, enviar un objeto fuertemente tipado (también conocido como modelo de vista) porque es más fácil de prueba.

Si se unen a una especie de "modelo" y "tener" o "viewbag ViewData" elementos aleatorios, entonces tiene pruebas automatizadas muy difícil.

Si está utilizando éstos consideran cómo usted puede ser capaz de reestructurar y utilizar simplemente ViewModels.

Hay algunas diferencias sutiles que significa que usted puede utilizar ViewData y ViewBag de manera ligeramente diferente de la vista. Una ventaja se describe en este post http://weblogs.asp.net/hajan/archive/2010/12/11/viewbag-dynamic-in-asp-net-mvc-3-rc-2.aspx y muestra que la fundición se puede evitar en el ejemplo mediante el uso de la ViewBag en lugar de ViewData.

viewdata: es un diccionario se usa para almacenar datos entre la vista y el controlador, u necesidad de difundir el objeto de datos de vista de su modelo correspondiente en el fin de ser capaz de recuperar datos de él ...

ViewBag: es una propiedad dinámica similar en su funcionamiento a los datos de vista, sin embargo es mejor primo que no necesita ser moldeado a su modelo corressponding antes de usarla en la vista .. .

A continuación se muestra el punto a punto de diferencia sobre ViewData, ViewBag, TempData y sesión. crédito / copiado askforprogram.in , Siga el enlace para ejemplo de código que no he mencionado aquí.

  1. ViewData en MVC

    • ViewData es característica de la clase ControllerBase.
    • ViewData es un tipo de objeto de diccionario.
    • ViewData es clave-valor de la colección diccionario.
    • ViewData se introdujo en MVC versión 1.0.
    • ViewData trabaja con NET Framework 3.5 o superior.
    • tiene que hacer la conversión de tipo de código al enumerar.
    • objeto ViewData mantiene los datos sólo para solicitud actual.
  2. ViewBag en MVC

    • ViewBag es característica de la clase ControllerBase.
    • ViewBag es un tipo de objeto dinámico.
    • ViewBag es un tipo de objeto.
    • ViewBag se introdujo en la versión 3.0 MVC.
    • ViewBag trabaja con .NET Framework 4.0 o superior.
    • ViewBag utiliza la propiedad y lo maneja, por lo que no hay necesidad de hacer la conversión de tipos, mientras enumerando.
    • objeto ViewBag mantiene los datos sólo para solicitud actual.
  3. TempData en MVC

    • TempData es característica de la clase ControllerBase.
    • TempData es un tipo de objeto de diccionario.
    • TempData es clave-valor de la colección diccionario.
    • TempData se introdujo en MVC versión 1.0.
    • TempData trabaja con NET Framework 3.5 o superior.
    • tiene que hacer la conversión de tipo de código al enumerar.
    • objeto
    • TempData se utiliza para datos entre solicitud actual y solicitud posterior.
  4. Sesión en MVC

    • Session es característica de Controlador (Abstract Class).
    • Sesión es un tipo de HttpSessionStateBase.
    • Sesión es clave-valor de la colección diccionario.
    • Session se introdujo en MVC versión 1.0.
    • TempData trabaja con marco .Net 1.0 y superior.
    • tiene que hacer la conversión de tipo de código al enumerar.
    • objeto
    • Sesión mantiene los datos para todas las solicitudes. Válido para todas las solicitudes, nunca caduca.

A pesar de que puede que no tenga una ventaja técnica a elegir entre un formato la otra, que debe ser consciente de algunas diferencias importantes entre los dos sintaxis. Una diferencia obvia es que ViewBag sólo funciona cuando la llave está accediendo es un C # identifi er válida. Por ejemplo, si se coloca un valor en ViewData [ "clave Con espacios "], no se puede acceder a ese valor con ViewBag porque el código no se compilará. Otra cuestión clave a considerar es que no se puede pasar en valores dinámicos como parámetros a métodos de extensión. El compilador de C # debe saber el tipo real de cada parámetro en tiempo de compilación con el fin de elegir el método de extensión correcta. Si algún parámetro es dinámico, la compilación fallará. Por ejemplo, este código siempre fallan: @ Html.TextBox ( "nombre", ViewBag.Name). Para solucionar este problema, ya sea uso ViewData [ "Nombre"] o tire la AV

géneros codice tagore

De esta manera podemos hacer que use los valores al pasar la información entre el controlador a otra página con TEMP DATOS

Una diferencia principal entre Noté ViewData y ViewBag es:

ViewData:. Devolverá objeto no importa lo que haya asignado en esto y necesidad de encasillado de nuevo volver al tipo original

ViewBag: es lo suficientemente inteligente como para volver exacta que escribir lo que ha asignado a ella no importa El tiempo que se han asignado tipo simple (es decir, int, string, etc.) o de tipo complejo

.

Ex:. Código Controller

 namespace WebApplication1.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Products p1 = new Products();
            p1.productId = 101;
            p1.productName = "Phone";
            Products p2 = new Products();
            p2.productId = 102;
            p2.productName = "laptop";

            List<Products> products = new List<Products>();
            products.Add(p1);
            products.Add(p2);
            ViewBag.Countries = products;
            return View();
        }
    }
    public class Products
    {
        public int productId { get; set; }
        public string productName { get; set; }
    }
}

Ver código.

<ul>
            @foreach (WebApplication1.Controllers.Products item in ViewBag.Countries)
            {
            <li>@item.productId &nbsp;&nbsp;&nbsp;@item.productName</li>
            }
        </ul>

pantalla de salida.

introducir descripción de la imagen aquí

Ver datos

  1. ViewData se utiliza para pasar datos desde el controlador a la vista
  2. ViewData se deriva de la clase ViewDataDictionary y es básicamente un diccionario i.e.Keys de objeto y Valores donde teclas son de cadena mientras que los valores serán objetos.
  3. typcasting
  4. Se requieren datos al recuperar los datos de ViewData debido a su tipo de objetos de datos y también cheque vValue nula acaben tipo de fundición de lo contrario se romperá la aplicación. Si se produce la redirección, entonces su valor será nulo Leer completa diferencia entre TempData ViewData y Ver bolsa

http://www.gurujipoint.com /2017/09/view-data-viewbag-and-tempdata.html

Ver datos
  1. ViewData se utiliza para pasar datos de controlador a vista
  2. Se deriva de la clase ViewDataDictionary
  3. Está disponible para la solicitud actual solamente
  4. Requiere typecasting para el tipo de datos complejo y controles para los valores nulos a error evitar
  5. Si se produce la redirección, entonces su valor será nulo
ViewBag
  1. ViewBag también se utiliza para pasar datos desde el controlador a la vista respectiva
  2. ViewBag es una propiedad dinámica que se aprovecha de la nueva dinámica ofrece en C # 4.0
  3. también está disponible para la solicitud actual sólo
  4. Si se produce la redirección, entonces su valor será nulo
  5. no requiere typecasting para el tipo de datos complejos

Aquí ViewData y ViewBag ambos son datos del pasaporte de segunda mano en controlador Ver .

1. ViewData

-. ViewData es objeto de diccionario que se deriva de ViewDataDictonary clase

-. Los datos sólo permiten una petición, los valores ViewData ser anulado cuando se produce página de redireccionamiento

-. ViewData valor se debe escribir cado antes de su uso

Ejemplo: En Controller

public ActionResult PassingDatatoViewWithViewData()
{
      ViewData["Message"] = "This message shown in view with the ViewData";
      return View();
}

Ver

@ViewData["Message"];

-. Con ViewData es un par como Key y Valor , mensaje es clave y en el valor de coma invertida es Valor

-. Los datos es simple por lo que no podemos utilizar typecasting aquí si los datos es complejo y luego usando la conversión de tipos

public ActionResult PassingDatatoViewWithViewData()
{
      var type= new List<string>
    {
        "MVC",
        "MVP",
        "MVVC"
    };
    ViewData["types"] = type;
    return View();
}

- A la vista de datos se puede extraer como

<ul>
        @foreach (var items in (List<string>)ViewData["types"])
        {
         <li>@items</li>
        }
  </ul>

2. ViewBag

-. ViewBag utiliza el envoltorio dinámico feature.ViewBag alrededor del ViewData

-. Se requiere el tipo de fundición En ViewBag

-. Igual que ViewData, si se produce la redirección valor será nulo

Ejemplo:

public ActionResult PassingDatatoViewWithViewBag()
{
          ViewData.Message = "This message shown in view with the ViewBag";
          return View();
}

Ver

@ViewBag.vbMessage

- Para el uso de tipo Complejo ViewBag

public ActionResult PassingDatatoViewWithViewBag()
{
          var type= new List<string>
        {
            "MVC",
            "MVP",
            "MVVC"
        };
        ViewBag.types = type;
        return View();
 }

- A la vista de datos se puede extraer como

<ul>
       @foreach (var items in ViewBag.types)
       {
         <li>@items</li>
       }
</ul>

-. La principal diferencia es que ViewBag encasillamiento no es necesario, pero ViewData encasillamiento se requiere

ViewBag y ViewData son dos medios que se utilizan para pasar información desde el controlador para ver en ASP.Net MVC. El objetivo de utilizar tanto el mecanismo es proporcionar al communicaton entre el controlador y Vista. Ambos tienen corta vida que es el valor de ambos se convierte en nula una vez que el cambio de dirección se ha producido es decir, una vez que la página se ha redireccionado de la página de origen (donde establecemos el valor de ViewBag o ViewData) a la página de destino, tanto ViewBag, así como ViewData se vuelve nula.

A pesar de tener estas similitudes tanto (ViewBag y ViewData) son dos cosas diferentes si hablamos de la aplicación de ambos. Las diferencias son las siguientes:

1) Si se analiza tanto la aplicación sabia entonces encontraremos que ViewData es una estructura de datos de diccionario -. Diccionario de objetos derivados de ViewDataDictionary y accesible el uso de cadenas como claves para estos valores, mientras que ViewBag hace uso de la dinámica de las funciones incluidas en C # 4.0 y es una propiedad dinámica.

2.) Al acceder a los valores de formar ViewData, necesitamos encasillado los valores (tipos de datos), ya que se almacenan como objetos en el diccionario ViewData pero no hay tal necesidad, si estamos accediendo º valor en caso de ViewBag.

3) En ViewBag podemos establecer el valor de la siguiente manera:.

      ViewBag.Name = "Value"; 

y el acceso lata de la siguiente manera:

          @ViewBag.Name

Mientras que en caso de ViewData los valores se pueden ajustar y se accede como sigue: Configuración ViewData de la siguiente manera:

ViewData["Name"] = "Value";

y el valor para acceder como esto

 @ViewData["Name"] 

Para más detalles haga clic aquí:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top