【问题标题】:MVC3 Ajax validation not showing despite model errors尽管模型错误,MVC3 Ajax 验证未显示
【发布时间】:2013-05-23 17:24:35
【问题描述】:

我无法让验证摘要以 ajax 形式显示。

Web.Config

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

局部视图:

@Html.ValidationSummary()

@using (Ajax.BeginForm(new AjaxOptions { UpdateTargetId = "file" }))

控制器:

    [HttpPost]
    public PartialViewResult Move(List<MoveFileResult> moveFileResult)
    {
        if (ModelState.IsValid)
        {    
        }

        // ModelState.AddModelError("err", "eerrr");
  ....

渲染的 HTML:

<input checked="checked" id="Replace3665" 
     name="MoveFileResult[0].MoveFileAction" 
     type="radio" value="Replace"> Overwrite
<input id="Rename3665" 
     name="MoveFileResult[0].MoveFileAction" 
     type="radio" value="Rename">
Rename to:
<input id="MoveFileResult_0__NewFileName" 
     name="MoveFileResult[0].NewFileName" 
     type="text" value="">
<span class="field-validation-valid" 
   data-valmsg-for="MoveFileResult[0].NewFileName" 
   data-valmsg-replace="true"></span>

脚本:(已更新)

<script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

它们是这样创建的:

@Html.TextBox(String.Format("MoveFileResult[{0}].NewFileName", i), item.NewFileName)
@Html.ValidationMessage(String.Format("MoveFileResult[{0}].NewFileName", i), item.NewFileName)

视图模型:

namespace MyProj.MVC.Areas.Admin.ViewModels
{
    public class MoveFilesViewModel
    {

        public List<MoveFileResult> MoveFileResult { get; set; }
    }

    public class MoveFileResult
    {
        [Required]
        public int FileID { get; set; }

        [Required]
        public MoveFileAction MoveFileAction { get; set; }

        //[RequiredIf("MoveFileAction", 2)]
        [Required]
        public string NewFileName { get; set; }    
    }

    public enum MoveFileAction : byte
    {
        Move = 0,
        Replace = 1,
        Rename = 2
    }
}
  1. 如果我运行 ModelState.AddModelError("err", "eerrr");它将显示摘要
  2. 如果我调试,ModelState 包含每个“NewFileName”的错误消息

不知何故,错误消息在我的自定义 Html 列表中不存在。

如何将其添加到此单选按钮 + 文本框的自定义列表中?

【问题讨论】:

  • MoveFileResult 的代码在哪里?

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

你也应该添加

jquery.validate.js

按顺序

<script src="/Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

这是一个非常好的reference@ ASP.NET MVC 3 中的非侵入式客户端验证。

【讨论】:

  • 我按该顺序添加了文件,但仍然没有任何反应,并且文本框没有收到错误消息
  • 我认为你应该使用 html.textboxfor 而不是 html.textbox。在validationMessage的情况下也是如此。
猜你喜欢
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
相关资源
最近更新 更多