我正在开发一个 MVC 4 应用程序,但遇到了一些麻烦。这是我的模型的摘录:
public class RegistryModel
{
[DisplayName("Registry id")]
public int registryId { get; set; }
[Required]
[DataType(System.ComponentModel.DataAnnotations.DataType.Date)]
[DisplayName("Reception date")]
public DateTime? receivedDate { get; set; }
[Required]
[DisplayName("Source")]
public Source source { get; set; }
}
源对象:
public class Source
{
public virtual string sourceCode { get; set; }
public virtual string fullName { get; set; }
public virtual string shortName { get; set; }
public virtual string type { get; set; }
public virtual IList<Registry> registryList { get; set; }
}
控制器:
public ActionResult Create()
{
var sourceRepo = new Repository<DTOS.Source>(MvcApplication.UnitOfWork.Session);
IEnumerable<SelectListItem> sourcesEnum = sourceRepo.FilterBy(x=>x.type.Equals("C")).Select(c => new SelectListItem { Value = c.sourceCode, Text = c.fullName });
ViewBag.Sources = sourcesEnum;
return View();
}
最后是视图
@model Registry.Models.RegistryModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>New Registry</legend>
<div class="editor-label">
@Html.LabelFor(model => model.source)
</div>
<div class="editor-field">
@Html.DropDownListFor(Model => Model.source.sourceCode, (IEnumerable<SelectListItem>)ViewBag.Sources, String.Empty)
@Html.ValidationMessageFor(model => model.source)
</div>
如果我从下拉列表中选择一个来源,它工作正常。但是,如果我在没有选择任何内容的情况下提交它,即使它在模型中被注释为 [Required],我也没有错误消息。
在控制器级别调试 HttpPost Create 后,我看到返回的 RegistryModel 的源成员被实例化,但它的所有成员都是空的(sourceCode、fullName 等)。
如果我在提交表单之前没有在下拉列表中选择任何源,为什么 MVC 会实例化模型的源成员?
我试图通过这个来修改vue:
@Html.DropDownListFor(Model => **Model.source**, (IEnumerable<SelectListItem>)ViewBag.Sources, String.Empty)
这次如果我在没有选择任何来源的情况下提交,我会收到错误消息,但是如果我选择一个,则提交后我会收到另一条错误消息,说“提交前选择的值用户代码无效”
非常感激任何的帮助 !B.