Вопрос

У меня проблема с привязкой модели.Если я делать используйте префикс в методе 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

Спасибо, что прочитали мой вопрос!

Это было полезно?

Решение

Это может помочь.

Вы добавляете модальную ошибку, поэтому MVC пытается получить требуемое значение, но, поскольку вы его не добавляли, это не удается.

Проверка формы с помощью ModelState

ASP.NET MVC - Html.Textbox() выдает «Ссылка на объект не установлена ​​на экземпляр объекта»

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top