문제

모델 바인딩에 문제가 있습니다. 만약 내가 하다 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