2012-09-18 92 views
1

我正在開發一個MVC 4應用程序,我有一些麻煩。 這裏是我的模型的摘錄: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; } 
} 

Source對象:

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> 

如果我選擇來源在下拉列表中,它工作正常。但是,如果我沒有選擇任何提交,我沒有錯誤消息,即使它在模型中註釋爲[必需]。

在控制器級別調試HttpPost Create之後,我發現返回的RegistryModel的源成員是實例化的,但其所有成員都爲null(sourceCode,fullName等)。

爲什麼MVC實例化模型的源成員,如果我在提交表單之前未在下拉列表中選擇任何源?

我試圖用這個修改VUE:

@Html.DropDownListFor(Model => **Model.source**, (IEnumerable<SelectListItem>)ViewBag.Sources, String.Empty) 

這一次我有,如果我提交不選擇任何來源,但如果我選擇一個,我在提交後,另一條錯誤消息,稱該錯誤信息'提交之前選擇的值用戶代碼無效'

任何幫助將不勝感激! B.

回答