Estoy desarrollando una aplicación web ASP.NET MVC 3 utilizando Razor y C#.¿Cómo se mantiene el valor de las variables globales entre las diferentes llamadas a métodos de acción en MVC3?
Acabo de descubrir que tengo algunos problemas con las variables globales, probablemente porque soy relativamente nuevo en MVC.
Tengo un controlador con algunas variables globales y métodos de acción. Decidí una variable global para permitir que los métodos de acción la manipularan y reflejara las manipulaciones de todos los métodos de acción. Tengo la siguiente situación:
public class myController : Controller
{
private string _MyGlobalVariable;
public ActionResult Index()
{
_MyGlobalVariable = "Hello";
//other code
return View("MyView");
}
public ActionResult Print()
{
_MyGlobalVariable += "Print";
return View("PrintView", _MyGlobalVariable);
}
}
El método de acción Imprimir() se llama con un Html.ActionLink() del MyView Vista.
Lo sorprendente es que el valor de _MyGlobalVariable no se cumple. Por lo tanto, el valor de _MyGlobalVariable antes de la instrucción _MyGlobalVariable += "Print"
es igual a nulo.
¿Estoy cometiendo un error? ¿Cómo puedo mantener el valor de las variables globales entre llamadas a Vistas?
Gracias
Francesco
PD: en mi caso específico de la variable global es una Dictionary<K,V>
pero supongo que no cambia la lógica.
PPS: Sé que usted puede utilizar ViewModels en lugar de variables globales para pasar los datos entre los métodos de acción, pero en mi caso es mucho menos código si uso un Dictionary<K,V>
que por lo general no me envuelvo en ViewModels (utilizo POCOs o Lists<T>
)
No haga esto. ¿Que estás tratando de hacer? – SLaks
@SLaks: Tengo algunos valores en un diccionario. Tengo que mostrarlos en una tabla y para hacerlo, envuelvo todos los elementos del Diccionario en un ViewModel. En la vista, el usuario tiene la tabla y tiene que confirmar a través de ActionLink si los datos están correctos. Luego, el método de acción señalado por ActionLink realiza la actualización de datos. El problema es que utilizo la clave del diccionario para actualizar los valores, por lo que pasar el modelo de vista al método de acción de actualización no sería tan útil. Espero haber sido claro –
CiccioMiami
Sí, cuéntanos qué intentas lograr. Las variables globales en ASP.NET MVC generalmente son un no-no, pero tal vez puedas usar algo tan simple como TempData. Depende de tu objetivo aunque – Francisco