1

我正在开发一个 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.

4

1 回答 1

0

我相信模型绑定器将创建一个 Source 对象,然后在提交表单时尝试填写它具有的值(无论是否存在)。RequiredAttribute 没有像你可能瘦的那样起作用。看这里:

http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

于 2012-10-18T16:21:24.083 回答