asp.net-mvc – .input-validation-error为表单重新显示失败值时
发布时间:2020-12-16 04:34:15 所属栏目:asp.Net 来源:网络整理
导读:我已经要求 question知道为什么在我的应用程序中,当我使用模型绑定来验证模型(TryUpdateModel())时,文本框被突出显示(即红色边框和粉红色阴影背景应用于文本框)但是当我使用时手动验证(ModelState.AddModelError).现在已经2天了,没有任何答案.我自己尝试过所
我已经要求
question知道为什么在我的应用程序中,当我使用模型绑定来验证模型(TryUpdateModel())时,文本框被突出显示(即红色边框和粉红色阴影背景应用于文本框)但是当我使用时手动验证(ModelState.AddModelError).现在已经2天了,没有任何答案.我自己尝试过所有事情而没有成功.所以,我决定以不同的方式提出这个问题.
我理解IT的方式,这就是ModelBinding如何处理请求. > ModelBinding从httpcontext获取传入值 这是我的问题当重新显示表单时: 正在为其值无效突出显示的文本框做了什么? 我知道Site.css中的类很少,例如.input-validation-error和.field-validation-error应用于文本框.也许ModelBinding在内部使用一个命令,如AddCss(“#MyTextBox”,“.input-validation-error”). 如果我知道它是如何工作的,我可以(也许)手动解决我的问题. 编辑 根据@Ian Galloway的要求,这是代码 public class RegistrationController : Controller { public FormViewModel formViewModel; private RegistrationService _registrationService = new RegistrationService(); private SaveService _saveService = new SaveService(); protected override void OnActionExecuting(ActionExecutingContext filterContext) { var serialized = Request.Form["formViewModel"]; if (serialized != null) { formViewModel = (FormViewModel)new MvcSerializer() .Deserialize(serialized); TryUpdateModel(formViewModel); } else formViewModel = (FormViewModel)TempData["formViewModel"] ?? new FormViewModel(); } protected override void OnResultExecuted(ResultExecutedContext filterContext) { if (filterContext.Result is RedirectToRouteResult) TempData["formViewModel"] = formViewModel; } public ActionResult SetUpOrganization(string cancel,string nextButton) { if ((nextButton != null) && ModelState.IsValid) { if (formViewModel.navigationData.IsAReview) return RedirectToAction("RequestPreview"); return RedirectToAction("ChooseTypeOrganization"); } ViewData["Cities"] = _registrationService.Get_Cities(); formViewModel.navigationData.NextAction = "SetUpOrganization"; return View(formViewModel); } public ActionResult ChooseTypeOrganization(string backButton,string nextButton) { if (backButton != null) { return RedirectToAction("SetUpOrganization"); } if (nextButton != null) { if (formViewModel.navigationData.IsAReview) return RedirectToAction("RequestPreview"); return RedirectToAction("DocumentsPresented"); } ViewData["TypeOrganization"] = _registrationService.Get_AllTypeOrganization(); formViewModel.navigationData.NextAction = "ChooseTypeOrganization"; return View(formViewModel); } public ActionResult DocumentsPresented(string backButton,string nextButton) { if (backButton != null) { return RedirectToAction("ChooseTypeOrganization"); } if (nextButton != null) { //Validation if (string.IsNullOrEmpty(formViewModel.registrationData.DocumentPresente)) { ModelState.AddModelError("DocumentPresente","Veuillez préciser votre autorisation"); return View(formViewModel); } //Navigation if (formViewModel.navigationData.IsAReview) return RedirectToAction("RequestPreview"); return RedirectToAction("PeopleRecommended"); } formViewModel.navigationData.NextAction = "DocumentsPresented"; return View(formViewModel); } public ActionResult PeopleRecommended(string backButton,string nextButton,string deleteButton,string deletePerson,string addPerson) { if (backButton != null) { return RedirectToAction("DocumentsPresented"); } if (nextButton != null) { ModelState.Clear(); if (formViewModel.registrationData.PeopleRecommended.Count == 0) ModelState.AddModelError("","Il faut absolument designer un responsable pour la requête"); // if (ModelState.IsValid) { if (formViewModel.navigationData.IsAReview) return RedirectToAction("RequestPreview"); return RedirectToAction("StateObjectifs"); } else { return View(formViewModel); } } // if (addPerson != null) { if (ModelState.IsValid) { formViewModel.registrationData.PeopleRecommended.Add( _registrationService.Translate_PersonToBeAdded_Into_Person(formViewModel.personToBeAdded) ); formViewModel.personToBeAdded = null; } else { formViewModel.navigationData.NextAction = "PeopleRecommended"; return View(formViewModel); } } if (deleteButton != null) { formViewModel.registrationData.PeopleRecommended.RemoveAt(int.Parse(deletePerson)); } ViewData.ModelState.Clear(); formViewModel.navigationData.NextAction = "PeopleRecommended"; return View(formViewModel); } [ValidateInput(false)] public ActionResult StateObjectifs(string backButton,string nextButton) { if (backButton != null) { return RedirectToAction("PeopleRecommended"); } if (nextButton != null) { if (string.IsNullOrEmpty(formViewModel.registrationData.Objective) || string.IsNullOrEmpty(formViewModel.registrationData.RequestDetails)) { if (string.IsNullOrEmpty(formViewModel.registrationData.Objective)) ModelState.AddModelError("Objective","Vous devez préciser l'objectif de votre requête"); if (string.IsNullOrEmpty(formViewModel.registrationData.RequestDetails)) ModelState.AddModelError("RequestDetails","Vous devez préciser le contenu de votre requête"); return View(formViewModel); } if (formViewModel.navigationData.IsAReview) return RedirectToAction("RequestPreview"); return RedirectToAction("StateDeadLine"); } return View(formViewModel); } public ActionResult StateDeadLine(string backButton,string nextButton) { if (backButton != null) { return RedirectToAction("StateObjectifs"); } if (nextButton != null) { if (formViewModel.registrationData.ChooseDifferentDeadLine) { if (formViewModel.registrationData.DifferentDeadline == null || string.IsNullOrEmpty(formViewModel.registrationData.ReasonsForDifferentDeadLine)) { if (formViewModel.registrationData.DifferentDeadline == null) ModelState.AddModelError("DifferentDeadline","Clickez pour choisir une nouvelle date"); if (string.IsNullOrEmpty(formViewModel.registrationData.ReasonsForDifferentDeadLine)) ModelState.AddModelError("ReasonsForDifferentDeadLine","Expliquez brievement pour quoi ce changement"); return View(formViewModel); } } return RedirectToAction("RequestPreview"); } formViewModel.navigationData.NextAction = "StateDeadLine"; return View(formViewModel); } public ActionResult RequestPreview(string backButton,string reviewInput,string save) { if (backButton != null) { return RedirectToAction("StateDeadLine"); } if (nextButton != null) { _saveService.Save_FormViewModel(formViewModel); return RedirectToAction("Index","Home"); } if (reviewInput != null) { formViewModel.navigationData.IsAReview = true; return RedirectToAction(RedirectHelpers.RedirectReviewAction(formViewModel.navigationData,reviewInput)); } ViewData["TypeOrganization_Summary"] = _registrationService.Get_TypeOrganization_Summary( formViewModel.registrationData.TypeOrganizationID ); if (save != null) { _saveService.Save_FormViewModel(formViewModel); return RedirectToAction("Index","Home"); } formViewModel.navigationData.NextAction = "RequestPreview"; return View(formViewModel); } } 编辑2 我选择了一个视图(因为他们都遇到了同样的问题).该视图称为StateObjectifs.aspx <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <!-- Script Begin --> <script src="../../Scripts/tiny_mce/tiny_mce.js" type="text/javascript"></script> <script type = "text/javascript"> tinyMCE.init({ mode: "textareas",theme: "advanced",theme_advanced_toolbar_location: "top",theme_advanced_toolbar_align: "left",theme_advanced_statusbar_location: "bottom",theme_advanced_resizing: true }); </script> <!-- End Script --> <fieldset id = "StateObjectifs"> <legend>Etape 5:</legend> <div id = "left-pane" style = "width:700px"> <%using (Html.BeginForm("StateObjectifs","Registration")) { %> <%: Html.ValidationSummary() %> <% = Html.Serialize("formViewModel",Model) %> <table> <tr> <th><% = Html.LabelFor(x=>x.registrationData.Objective) %></th> <td><% = Html.TextBoxFor(x=>x.registrationData.Objective) %> <%: Html.ValidationMessageFor(x =>x.registrationData.Objective,"*")%></td> </tr> <tr> <th colspan = "2"><% = Html.LabelFor(x =>x.registrationData.RequestDetails) %></th> </tr> <tr> <td colspan = "2"> <% = Html.TextAreaFor(x =>x.registrationData.RequestDetails,10,75,null) %> </td> </tr> </table> </div> <div id = "right-pane"> <ul> <li>Les cases pour lesquelles le titre se termine par (*) sont obligatoires</li> <li>Pour mieux vous servir,veuillez décrire clairement de manière concise votre requête. Par exemple: <i>Les données de l'USAID sur le secteur santé pour l'année 2009</i></li> </ul> </div> <div class = "clear"></div> <fieldset> <% Html.RenderPartial("NavigationView",Model.navigationData); %> </fieldset> </fieldset> <%} %> 谢谢你的帮助. 解决方法
实际上,这个突出显示是由呈现文本框的html助手执行的.它使用给定的密钥检查模型状态是否存在错误,并在必要时添加必要的CSS类.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – ASP.NET MVC – 用于ICollection的EditorTe
- 用于创建ASP.NET成员资格提供程序用户的脚本
- asp.net-mvc-3 – Application_End被过早/经常调用
- asp.net-mvc – 有什么技巧/技巧使用亚音速与Asp.Net MVC框
- asp.net-mvc-3 – “..必须从WebViewPage或WebViewPage”在
- asp.net – 为什么Page.PreviousPage始终为null?
- asp.net-mvc – ASP.Net MVC:静态HTML文件的RenderPartial
- asp.net-mvc-3 – ASP.Net Mvc 3 Url.Action方法使用先前请
- Asp.Net上传前检查文件大小
- asp.net-web-api – HttpClient不报告从Web API返回的异常
推荐文章
站长推荐
热点阅读