2012-06-12 15 views
7

Tengo un ViewBag.Something y esta información se genera aleatoriamente. En mi opinión, establecí esto en una etiqueta como @Html.LabelFor(m => m.Something, (string)ViewBag.Something). Esto funciona bien, pero cuando envío el formulario puede haber errores y si hay errores, necesito que esta etiqueta siga siendo la misma, ya no quiero datos dinámicos/aleatorios, así que no llamaría al método de control que se generó este ViewBag. ¿Hay alguna manera de retener este valor sin tener alguna variable privada en mi controlador? ¿Alguna buena forma de que lo haga MVC/Razor?¿Cómo se pueden guardar los datos de ViewBag después de una publicación de formulario?

Respuesta

1

En el get, configure un modelo, configúrelo dinámicamente y cuando se esté ejecutando return view(), haga return view(model). Luego, en la vista, configure un campo oculto que pueda seguir pasando el valor necesario. Elegí seguir esta ruta porque no tengo que preocuparme por ningún código de servidor para que esto funcione en una publicación y no tengo que preocuparme por ninguna sesión.

+0

Esto tiene un problema de seguridad. Si alguien inspecciona el código, podrá obtener o incluso modificar los datos ... ¿Qué sucede si se trata de un objeto? – Nick

12

Opción 1:

pasar el valor de "ViewBag.Something" al controlador mediante el uso de valores de ruta:

@Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something }) 

Opción 2: Puede utilizar TempData.

public ActionResult Index() 
{ 
var Something = "YOURVALUE"; 
TempData["Something"] = Something; 
....... 
} 


public ActionResult OtherAction() 
{ 
    var Something = TempData["Something "]; 
    ........... 
} 

Estado de pasar entre los métodos de acción

métodos de acción podría tener que pasar los datos a otra acción, como si se produce un error cuando se registró un formulario, o si el método debe redirigir a adicional métodos, como podría ocurrir cuando el usuario se dirige a una vista de inicio de sesión y luego vuelve al método de acción original.

Un método de acción puede almacenar datos en el objeto TempDataDictionary del controlador antes de llamar al método RedirectToAction del controlador para invocar la siguiente acción. El valor de la propiedad TempData se almacena en estado de sesión. Cualquier método de acción que se llame después de establecer el valor TempDataDictionary puede obtener valores del objeto y luego procesarlos o mostrarlos. El valor de TempData persiste hasta que se lee o hasta que la sesión expira. La persistencia de TempData de esta manera habilita escenarios como la redirección, porque los valores en TempData están disponibles más allá de una sola solicitud.

+0

así que almacenaría en una ViewBag.Something TempData cuando golpeo y presentar si algo sale mal, estará disponible para su uso? Eso podría crear problemas porque mi etiqueta se está completando desde ViewBag y supongo que ahora tendré que tener algún tipo de if? – Pittfall

+0

Consulte mi actualización para obtener una opción más que puede probar. –

+0

Gracias por la ayuda, se ve bien pero fui en una dirección diferente, así que no puedo aceptar su respuesta – Pittfall

-1

Viendo mensaje en viewbag tras su publicación (que el usuario este método)

ActionResult SubmitUser(){ 

    ViewBag.Msg =TempData["Msg"]; 

    return view(); 
} 


[HtttpPost] 
ActionResult SubmitUser(){ 

TempData["Msg"] ="Submitted Successfully"]; 

    return view(); 
} 

el valor es enviar a un método get ..

Cuestiones relacionadas