未创建 ASP.NET MVC 2 客户端验证规则

2024-01-11

MVC 没有为我的视图模型生成客户端验证规则。 HTML 仅包含以下内容:

<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata) { window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({"Fields":[],"FormId":"form0","ReplaceValidationSummary":false});
//]]>
</script>

注意Fields[]是空的!

我的视图是强类型的,并使用新的强类型 HTML 帮助器(TextBoxFor(), etc).

视图模型/域模型

public class ItemFormViewModel
{
    public Item Item { get; set; }
    [Required] [StringLength(100)] public string Whatever { get; set; } // for demo
}
[MetadataType(typeof(ItemMetadata))]
public class Item
{
    public string Name { get; set; }
    public string SKU { get; set; }
    public int QuantityRequired { get; set; }
    // etc.
}
public class ItemMetadata
{
    [Required] [StringLength(100)] public string Name { get; set; }
    [Required] [StringLength(50)] public string SKU { get; set; }
    [Range(0, Int32.MaxValue)] public int QuantityRequired { get; set; }
    // etc.
}

(我知道我正在使用域模型作为我的/作为我的一部分查看模型,这不是一个好的做法,但现在忽略它。)

View

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<ItemFormViewModel>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>Editing item: <%= Html.Encode(Model.Item.Name) %></h2>

    <% Html.EnableClientValidation(); %>
    <%= Html.ValidationSummary("Could not save the item.") %>

    <% using (Html.BeginForm()) { %>

        <%= Html.TextBoxFor(model => model.Item.Name) %>
        <%= Html.TextBoxFor(model => model.Item.SKU) %>
        <%= Html.TextBoxFor(model => model.Item.QuantityRequired) %>

        <%= Html.HiddenFor(model => model.Item.ItemID) %>

        <%= Html.TextBox("Whatever", Model.Whatever) %>
    <input type="submit" value="Save" />
    <% } %>
</asp:Content>

我包括了Whatever视图模型上的属性,因为我怀疑 MVC 没有递归地检查ItemFormViewModel.Item,但即使这样也没有得到验证?我什至尝试深入研究 MVC 框架源代码,但一无所获。可能发生什么事?


在我发布问题后大约五秒钟,我意识到:我的观点没有ValidationMessage任何地方的占位符。我添加了<%= Html.ValidationMessageFor(model => model.Item.Name) %>你瞧,MVC 添加了验证规则Item.Name到页面底部的 JS 块。

事实证明,MVC 不会为字段发出客户端验证规则unless您实际上执行了以下操作之一:

  1. Call Html.ValidationMessage()为了财产。
  2. Call Html.Validate()为了财产。 (这个不会输出错误信息)
  3. 使用渲染控件Html.EditorForModel(). (source http://forums.asp.net/p/1524345/3676778.aspx#3675229)

执行任何这些操作都会告诉 MVC,“我的视图模型的这个属性可由用户编辑,因此您应该验证它。”仅使用 HTML 帮助程序在页面上粘贴文本框(即使您使用新的强类型帮助程序)也是不够的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未创建 ASP.NET MVC 2 客户端验证规则 的相关文章

随机推荐