MVC ViewData Modèle null après le Post-retour à l'Action du Contrôleur
J'ai un simple MVC 4 (Beta) Application et juste observé quelque chose que j'assume peuvent être traités différemment. Dans ce cas, lorsque le Produit ci-dessous d'Action est appelé un Modèle est créé et attribué à ViewData pour une utilisation dans le Vue. Tout cela fonctionne très bien, le Modèle propriété n'est pas null, et le point de Vue de l'utilisation du Modèle de la propriété des œuvres.
[HttpGet]
public ActionResult Product()
{
return ExecuteFormRequest(View(), true, delegate
{
var model = Request.ParseFromQueryString<Product>();
if (model != null)
{
ViewData.Model = model;
}
return View();
});
}
Lorsque le Produit est mis à jour et Post ed vers le Contrôleur toutes les données a l'air bien, mais si le produit de l'échec de la validation et je retourne la Vue ActionResult (comme indiqué ci-dessous) le Vue rencontre une référence nulle exception, car la Vue Modèle propriété est maintenant null
[HttpPost]
public ActionResult Product(Product product)
{
if (!ModelState.IsValid)
{
return View();
}
//Do other business stuff and target new or same View
return View();
}
C'est la ligne dans le Vue qui conduit à une référence nulle exception, parce que la Modèle Propriété est maintenant null.
@if (!string.IsNullOrEmpty(Model.MyValue)) {}
La façon dont j'ai résolu ce fut pour réinitialiser le Modèle Propriété (comme indiqué ci-dessous). Cela semble mauvais pour moi et je me demandais si j'aborde ce tout faux. Toutes les idées bienvenues?
[HttpPost]
public ActionResult Product(Product product)
{
if (product!= null)
{
ViewData.Model = product;
}
if (!ModelState.IsValid)
{
return View();
}
//Do other business stuff and target new or same View
return View();
}
Vous devez vous connecter pour publier un commentaire.
Si vous avez un typage fort viewmodel, pourquoi êtes-vous à l'aide de viewdata? essayez ceci:
La raison pour laquelle vous voyez le comportement avec votre approche est que HTTP est sans état. Contrairement à webforms, MVC ne pas reconstituer l'ensemble de vos variables d'après un post. Chaque méthode d'action démarre avec un nouveau ViewData dictionnaire.
Pourquoi êtes-vous à l'aide de ViewData? Ne l'utilisez pas. Faire simple et toujours passer votre modèle d'affichage de la vue lorsque le retourner:
Si Vous utilisez le Lien d'Action en Vue d'aller de nouveau à l'Action. Le formulaire n'est pas soumis dont les résultats avec le modèle de valeurs null. essayez d'envoyer le formulaire sur le lien d'action Cliquez sur l'événement qui va résoudre le Problème.
Voici un échantillon à Soumettre le formulaire sur le Lien d'Action d'événement