2015-04-03 44 views
0

當我構建我的表單時,我的列表正確填充。但是,當我回到我的控制器時,列表SynonymTerm爲空。爲什麼我的表單沒有在我的視圖模型上填充我的列表?

這是我的視圖模型:

public class SynonymEditViewModel 
{ 
    public string Term { get; set; } 

    public List<SynonymTermEditViewModel> SynonymTerm; 

    public SynonymEditViewModel() 
    { 
     SynonymTerm = new List<SynonymTermEditViewModel>(); 
    } 
} 

public class SynonymTermEditViewModel 
{ 
    public string Term { get; set; } 
    public string ReplacementTerm { get; set; } 

    public SynonymDuplicateWarning Warning { get; set; } 

    public SynonymTermEditViewModel() 
    { 
     Warning = new SynonymDuplicateWarning(); 
    } 
} 

public class SynonymDuplicateWarning 
{ 
    public List<string> Terms { get; set; } 

    public SynonymDuplicateWarning() 
    { 
     Terms = new List<string>(); 
    } 
} 

視圖的簡化版本:

Edit.cshtml

@model MyProject.ViewModels.Synonyms.SynonymEditViewModel 
<div class="form-group"> 
    <div class="col-md-2"> 
     @Html.LabelFor(model => model.Term) 
    </div> 
    <div class="col-md-10"> 
     @Html.HiddenFor(model => model.Term) 
     @Html.DisplayFor(model => model.Term) 
    </div> 
</div> 

<table id="terms-table"> 
    <tbody> 
     @Html.EditorFor(model => model.SynonymTerm) 
    </tbody> 
</table> 

EditorTemplates/SynonymTermEditViewModel.cshtml

@model MyProject.ViewModels.Synonyms.SynonymTermEditViewModel 
<tr> 
    <td> 
     @Html.TextBoxFor(model => model.Term) 
     @Html.ValidationMessageFor(model => model.Term) 

     @Html.EditorFor(model => model.Warning) 
    </td> 
</tr> 

這是從瀏覽器請求中提取的表單數據。

Term:Cat 
SynonymTerm[0].Term:Feline 

該數據被傳遞到該控制器:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(SynonymEditViewModel synonym) 
{ 
    if (ModelState.IsValid) 
    { 
     //breakpoint here 
     var dbSynonym = db.Synonym_Replacement_Term.Find(synonym.Term); 
     Mapper.Map(synonym, dbSynonym); 
     db.SaveChanges(User.Identity.Name, Request.ServerVariables["REMOTE_ADDR"]); 
     return RedirectToAction("Index"); 
    } 

    return View(synonym); 
} 

預期的行爲是SynonymTerm是含有與Term="Feline" 1個對象,以及具有默認/構建值的所有其它屬性的列表。是否有任何理由SynonymTerm將爲空?

+0

你可以發佈你的控制器嗎? – DrewJordan 2015-04-03 20:20:33

+0

發表了控制器。 – Jason 2015-04-03 20:28:01

+0

發表您的看法,回覆。 – vortex 2015-04-04 11:04:45

回答

0

我找到了答案。在我的ViewModel,我需要添加一個getter/setter方法列表:

public List<SynonymTermEditViewModel> SynonymTerm { get; set; } 

顯然,他們需要通過MVC使用的反射,根據this similar question

相關問題