2017-04-01 115 views
0

我正在使用tuples将多个模型加载到视图中。未显示ASP.NET MVC验证错误

的视图是为

@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=""> 

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

+0

我不确定,但我认为如果您返回视图而不是偏视图会更好。您将进入显示发送错误信息的屏幕。我认为这足够当你插入“返回视图();”在控制器的else块中。 – Larce

+0

@Larce更改为公共异步任务并返回View(model);但它也没有按预期工作 – OrElse

+0

发生了什么呢?你还是会看到局部的观点吗? – Larce

回答

1

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

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

您正在返回一个没有验证错误消息代码的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); 
     } 
+0

破坏你好,我可以从同一控制器返回PartialViewResult和ViewResult? – OrElse

+1

如果你正在返回actionResult。是! –

+0

您可以检查更新吗? – OrElse