viewmodels和unobtrusive验证mvc3

时间:2011-04-25 16:19:00

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

我无法使用表示我生成的EF类的抽象的自定义viewMode来进行不显眼的验证。

尽可能尝试,我的城市实体中的属性Name的表单提交未启用验证。我认为它与视图中的不同模型有关,但我根本不了解它是如何工作的。

请注意。我有所有最新的验证脚本,当使用firebug和firequery观察页面时,我可以看到脚本正在添加并从输入中删除有效的类,但输入不是验证集合的一部分。

非常感谢提前。

我的viewModel:

/// <summary>
/// Represents abstraction of the City View that also serves in
/// data binding between the City View and the City Model.
/// </summary>
public class CityViewModel
{
    /// <summary>
    /// Gets or sets the city.
    /// </summary>
    /// <value></value>
    public City City { get; set; }

    /// <summary>
    /// Gets or sets the collection of states.
    /// </summary>
    /// <value></value>
    public ICollection<State> States { get; set; }
}

我的CreateCity视图:

@model OzFarmGuide.ViewModels.CityViewModel
@{
    ViewBag.Title = "Create a new city";
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
<h2>
    Create a new city</h2>

@using (Html.BeginForm())
{
    @Html.EditorFor(model => model.City, new { States = Model.States })
    <div class="entity-actions">
        <input type="submit" value="Create" />
        |
        @Html.ActionLink("Back to List", "Cities")
    </div>
}

我的编辑器模板:( _ValidationPartial只包含脚本引用)

@model OzFarmGuide.Models.City
@Html.Partial("_ValidationPartial")
@Html.ValidationSummary(true)
<div class="editor-label">
    @Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
    @Html.TextBoxFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.State)
</div>
<div class="editor-field">
    @Html.DropDownList("StateId",
    new SelectList(ViewBag.States as System.Collections.IEnumerable,
    "StateId", "Name",
    Model.StateId))
</div>
@Html.HiddenFor(model => model.CityId)

这里要求的是我包含的脚本:

<script src="@Url.Content("http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

3 个答案:

答案 0 :(得分:3)

您需要在所有引用类型和字符串类型上添加[必需]数据注释。正如您所提到的,您的类是EF生成的。对于那个使用好友类。在另一个类似问题中查看answer

答案 1 :(得分:0)

1-对于字符串属性,您应该添加[必需]。

2-您可以检查您是否有多个具有相同名称“名称”的输入字段,这可能是问题所在。

答案 2 :(得分:0)

您是否设置了以下内容?

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

您也可以使用代码打开或关闭它们:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

另外,您是否已将任何所需的数据注释添加到您的属性中?

Brad Wilson On Unobtrusive Validation