代码之家  ›  专栏  ›  技术社区  ›  Les

ASP。NET MVC模型绑定

  •  1
  • Les  · 技术社区  · 17 年前

    我在模型绑定方面遇到了问题。如果我 使用CopyToModelStateDictionary方法中的前缀,我无法获得无效控件的样式或验证消息。如果我

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

    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:  }
    

    堆栈跟踪:

    [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
    

    1 回复  |  直到 17 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    这可能会有所帮助。

    您正在添加一个模态错误,因此MVC正在尝试检索尝试的值,但由于您没有添加它,它失败了。

    Validating form using ModelState

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