【问题标题】:ASP.NET MVC Validation errors not displayingASP.NET MVC 验证错误未显示
【发布时间】:2017-04-01 08:21:11
【问题描述】:

我正在使用tuples 将多个模型加载到一个视图中。

视图如下

 @using (Ajax.BeginForm(null, null, ajaxOptions, new { @class = "contact-form" }))

        {
           @Html.AntiForgeryToken()
           <div class="form-group form-group--xs">
              @Html.TextBoxFor(m => m.Item2.Email, new { @class = "form-control input-sm", placeholder = "Your email address..." })
              @Html.ValidationMessageFor(m => m.Item2.Email)
           </div>
           <div class="form-group form-group--xs">
              @Html.TextAreaFor(m => m.Item2.Message, new { @class = "form-control input-sm", placeholder = "Your message...", rows = "4" })
              @Html.ValidationMessageFor(m => m.Item2.Message)
           </div>

           <input type="submit" class="btn btn-primary-inverse btn-sm btn-block" value="Send Your Message" />
        }

控制器是

        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<PartialViewResult> Submit([Bind(Prefix = "Item2")] ContactForm model)
        {
            bool isMessageSent = true;

            if (ModelState.IsValid)
            {
                try
                {
                    await Services.EmailService.SendContactForm(model);
                }
                catch (Exception ex)
                {
                    isMessageSent = false;
                }
            }
            else
            {
                isMessageSent = false;
            }
            return PartialView("_SubmitMessage", isMessageSent);
        }

联系方式是

 public class ContactForm
    {
        [Required(ErrorMessage = "You must provide your email."), EmailAddress]
        public string Email { get; set; }

        [Required(ErrorMessage = "You must include a message.")]
        public string Message { get; set; }
    }

最后是局部视图

@model bool

@if (Model)
{
    <div style="color:#c2ff1f">Your message has been sent.</div>
}
else
{
    <div style="color:#f34141">An error occured while sending your message</div>
}

更新:电子邮件文本框呈现的 html 是

<input class="form-control input-sm" 
data-val="true" 
data-val-email="The Email field is not a valid e-mail address." 
data-val-required="You must provide your email." 
id="Item2_Email" 
name="Item2.Email" 
placeholder="Your email address..." 
type="text" 
value="">

如果我没有在电子邮件字段或消息字段中输入任何文本,则不会发送消息 :) 但我在视图中没有验证错误 :( 我在这里做错了什么?

【问题讨论】:

  • 我不确定,但我认为如果返回视图而不是局部视图会更好。您将进入显示发送电子邮件时发生错误的屏幕。我认为插入“return View();”就足够了在控制器的 else 块中。
  • @Larce 改为 public async Task 并返回 View(model);但它也没有按预期工作
  • 那会发生什么?你还能看到局部视图吗?
  • 我的意思是验证错误没有显示,我现在没有返回部分视图。我想元组的东西坏了

标签: c# asp.net asp.net-mvc validation asp.net-ajax


【解决方案1】:

我想我需要休息一下。我失踪了

@Scripts.Render("~/bundles/jqueryval")

【讨论】:

    【解决方案2】:

    您返回的 partialView 没有验证错误消息代码。

    试试这个代码:

            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<PartialViewResult> Submit([Bind(Prefix = "Item2")] ContactForm model)
            {
                bool isMessageSent = true;
    
                if (ModelState.IsValid)
                {
                    try
                    {
                        await Services.EmailService.SendContactForm(model);
                    }
                    catch (Exception ex)
                    {
                        isMessageSent = false;
                    }
    
                }
                else
                {
                    isMessageSent = false;
                    //Return the view that has validation error message display code.
                    return View(model);
                }
                return PartialView("_SubmitMessage", isMessageSent);
            }
    

    【讨论】:

    • 你好,我可以从同一个控制器返回 PartialViewResult 和 ViewResult 吗?
    • 如果您返回 actionResult。是的!
    • @OrElse 更新中的 html,代码是在点击提交之前还是在点击提交之后生成的(返回错误)?
    • @Kumar_Vikas 我们不能从同一个控制器返回 PartialViewResult 和 ViewResult。
    • @ParthRuparelia 为什么不呢?
    【解决方案3】:

    对于像我这样的人,只需将这些脚本添加到您的视图中即可:

    1. jquery.validate
    2. jquery.validate.unobtrusive

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      相关资源
      最近更新 更多