2015-04-03 45 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

相关问题