加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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获取传入值
>它实例化该模型的对象
>尝试将这些值解析为对象
>如果某个属性出现问题,它会使用ModelState.AddModelError标记出现错误的属性.
>重新显示视图

这是我的问题当重新显示表单时:

正在为其值无效突出显示的文本框做了什么?

我知道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类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读