@html.validationmessagefor 不显示错误信息
@html.validationmessagefor does n't show error message
我的 mvc 项目中有以下视图模型。
public class AddGISViewModel
{
public myproject.Models.DomainModels.GIS gis { get; set; }
public IEnumerable<myproject.Models.DomainModels.Companies> Companies { get; set; }
public long CompanyID { get; set; }
}
我创建了这样的视图
@model myproject.ViewModels.GIS.AddGISViewModel
@using (Ajax.BeginForm("Create", "GIS", new AjaxOptions { HttpMethod = "Post", Url = "/GIS/Create" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.Label("company", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CompanyID, new SelectList(Model.Companies, "CompanyID", "Name"), "select company please ", htmlAttributes: new {@class = "form-control" })
@Html.ValidationMessageFor(model => model.CompanyID)
</div>
</div>
我还创建了以下元数据
[Required(ErrorMessage = "you should select company")]
[DisplayName("company")]
[Display(Name = "company")]
public long CompanyID { get; set; }
当我 运行 我的项目 @validationmessagefor 显示 'CompanyID is a required field' 而不是我在元数据中定义的 'you should select company' 时。我该如何解决这个问题?
您已经创建了一个视图模型,因此将这些属性应用到视图模型中的 属性。由于视图模型的目的是在视图中表示您想要 display/edit 的内容,因此没有必要为元数据创建单独的 class。
你的视图模型应该是
public class AddGISViewModel
{
[Required(ErrorMessage = "you should select company")]
[DisplayName("company")]
public long? CompanyID { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
....
}
请注意,CompanyID
属性 应该可以为 null 以防止发布不足的攻击,并且用于在下拉列表中显示公司的集合 属性 应该是 IEnumerable,以便观点是
@Html.DropDownListFor(model => model.CompanyID, Model.Companies, "select company please ", new { @class = "form-control" })
此外,如果您编辑该模型的任何属性,视图模型不应包含数据模型。如果是这样,请将 GIS gis
替换为您在视图中需要的 GIS
中的每个 属性。
我的 mvc 项目中有以下视图模型。
public class AddGISViewModel
{
public myproject.Models.DomainModels.GIS gis { get; set; }
public IEnumerable<myproject.Models.DomainModels.Companies> Companies { get; set; }
public long CompanyID { get; set; }
}
我创建了这样的视图
@model myproject.ViewModels.GIS.AddGISViewModel
@using (Ajax.BeginForm("Create", "GIS", new AjaxOptions { HttpMethod = "Post", Url = "/GIS/Create" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.Label("company", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CompanyID, new SelectList(Model.Companies, "CompanyID", "Name"), "select company please ", htmlAttributes: new {@class = "form-control" })
@Html.ValidationMessageFor(model => model.CompanyID)
</div>
</div>
我还创建了以下元数据
[Required(ErrorMessage = "you should select company")]
[DisplayName("company")]
[Display(Name = "company")]
public long CompanyID { get; set; }
当我 运行 我的项目 @validationmessagefor 显示 'CompanyID is a required field' 而不是我在元数据中定义的 'you should select company' 时。我该如何解决这个问题?
您已经创建了一个视图模型,因此将这些属性应用到视图模型中的 属性。由于视图模型的目的是在视图中表示您想要 display/edit 的内容,因此没有必要为元数据创建单独的 class。
你的视图模型应该是
public class AddGISViewModel
{
[Required(ErrorMessage = "you should select company")]
[DisplayName("company")]
public long? CompanyID { get; set; }
public IEnumerable<SelectListItem> Companies { get; set; }
....
}
请注意,CompanyID
属性 应该可以为 null 以防止发布不足的攻击,并且用于在下拉列表中显示公司的集合 属性 应该是 IEnumerable,以便观点是
@Html.DropDownListFor(model => model.CompanyID, Model.Companies, "select company please ", new { @class = "form-control" })
此外,如果您编辑该模型的任何属性,视图模型不应包含数据模型。如果是这样,请将 GIS gis
替换为您在视图中需要的 GIS
中的每个 属性。