我无法使用表示我生成的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>
答案 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;
另外,您是否已将任何所需的数据注释添加到您的属性中?