2009-06-17 7 views
1

Je rencontre un problème avec la liaison de modèle. Si utiliser le préfixe dans la méthode CopyToModelStateDictionary, je ne reçois pas les messages de style ou de validation pour les contrôles non valides. Si je ne pas utiliser le préfixe, je reçois les messages de style et de validation, mais la page se bloque si l'utilisateur n'a pas fait une sélection à partir d'une liste de boutons radio créée dynamiquement. Comment puis-je avoir les deux? Je ne comprends pas ce qui se passe ici.Reliure modèle ASP.NET MVC

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, FormCollection collection) 
    { 
     Request request = requestRepository.GetById(id); 
     UpdateModel(request); 
     Helpers.CopyToModelStateDictionary(request.GetRuleViolations(), ModelState, "request"); 
     ... 
     if (!ModelState.IsValid) 
     { 
      return View("Edit_Requestor", request); 
     } 
    } 

    public static void CopyToModelStateDictionary(NameValueCollection errors, ModelStateDictionary modelState, string prefix) 
    { 
     foreach (string key in errors) 
     { 
      foreach (string value in errors.GetValues(key)) 
      { 
       modelState.AddModelError(prefix + "." + key, value); 
      } 
     } 
    } 

Message d'erreur

Line 9: foreach (ProblemType problemType in problemTypes) 
Line 10: { 
Line 11:  Writer.Write(Html.RadioButton("ProblemType", problemType.Value)); 
Line 12:  Writer.Write(problemType.Text + "<br/>"); 
Line 13: } 

Stack Trace:

[NullReferenceException: Object reference not set to an instance of an object.] 
System.Web.Mvc.HtmlHelper.GetModelStateValue(String key, Type destinationType) +63 
System.Web.Mvc.Html.InputExtensions.InputHelper(HtmlHelper htmlHelper, InputType inputType, String name, Object value, Boolean useViewData, Boolean isChecked, Boolean setId, Boolean isExplicitValue, IDictionary`2 htmlAttributes) +328 
System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value, Boolean isChecked, IDictionary`2 htmlAttributes) +193 
System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value, IDictionary`2 htmlAttributes) +282 
System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value) +61 
ASP.views_request_lstproblemtype_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\Web\Views\Request\lstProblemType.ascx:11 
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +256 
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19 
System.Web.UI.Control.Render(HtmlTextWriter writer) +10 
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99 
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 
System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) +134 
System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) +19 
System.Web.UI.Page.Render(HtmlTextWriter writer) +29 
System.Web.Mvc.ViewPage.Render(HtmlTextWriter writer) +59 
System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) +27 
System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) +99 
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266 

Merci d'avoir lu ma question!

Répondre

1

Cela peut être utile.

Vous ajoutez une erreur modale afin que MVC tente d'extraire la valeur tentée, mais parce que vous ne l'avez pas ajouté, il échoue.

Validating form using ModelState

ASP.NET MVC - Html.Textbox() throws "Object reference not set to an instance of an object"

+0

Merci pour ces liens. Je dois faire plus de recherches avant de pouvoir poster ma solution. – Leslie

+0

Ces liens ont été très utiles. En outre, si quelqu'un a besoin d'aide, recherchez StackOverflow pour "ValueProvider". Je vais modifier avec ma solution après avoir fait plus de tests. – Leslie

Questions connexes