2009-06-17 19 views
1

Ich habe ein Problem mit der Modellbindung. Wenn ich das Präfix in der CopyToModelStateDictionary-Methode verwende, erhalte ich keine Styling- oder Validierungsnachrichten für die ungültigen Steuerelemente. Wenn ich nicht verwende das Präfix, bekomme ich die Styling und Validierung Nachrichten, aber die Seite stürzt ab, wenn der Benutzer keine Auswahl aus einer dynamisch erstellten Liste von Radio-Buttons getroffen hat. Wie kann ich beides bekommen? Ich verstehe nicht, was hier passiert.ASP.NET MVC Model Binding

[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); 
      } 
     } 
    } 

Fehlermeldung

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 

Dank für meine Frage beim Lesen!

Antwort

1

Dies kann hilfreich sein.

Sie fügen einen modalen Fehler hinzu, sodass MVC versucht, den versuchten Wert abzurufen, aber weil Sie ihn nicht hinzugefügt haben, schlägt er fehl.

Validating form using ModelState

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

+0

Dank für diese Links. Ich muss mehr Forschung betreiben, bevor ich meine Lösung veröffentlichen kann. – Leslie

+0

Diese Links waren sehr hilfreich. Wenn Sie weitere Hilfe benötigen, durchsuchen Sie StackOverflow nach "ValueProvider". Ich werde mit meiner Lösung bearbeiten, nachdem ich mehr Tests gemacht habe. – Leslie

Verwandte Themen