如何更新分层ViewModel?

时间:2013-02-01 03:06:26

标签: asp.net-mvc-3

我遇到了这个问题。

我有一个像这样定义的模型AssessmentModel:

public class AssessmentModel
{
    public Respondent Respondent { get; set; }
    public List<CompetencyModel> Competencies { get; set; }
}

public class CompetencyModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ResultModel> Results { get; set; }
}

public class ResultModel
{
    public int Id { get; set; }
    public int Score { get; set; }
}

我只需要将值设置为ResultModel的Score属性。 分数是这里唯一可编辑的属性。

我只有1个View,这个视图有一个@model List,它显示了一个CompetencyModel项目列表,每个项目都带有Edit按钮。 当我单击“编辑”按钮时,CompetencyModel的Id将传递到同一个View,View将为属于所选CompetencyModel的ResultModel项绘制一个Edit表单。

但是,ResultModel项的表单存在于同一个View中,而View的模型仍然是@model List。

如何通过对每个ResultModel项使用可绑定的Html.EditorFor(m =&gt; m.Score)帮助程序来获取Score属性?

视图的定义如下:

@model List<CompetencyModel>
@foreach(var comp in Model)
{
    <p>@comp.Name</p>
    <a href="@Url.Action("Assessment", new { comp.Id })">Edit</a>
}

在控制器中我设置ViewBag.CurrentId = comp.Id,并在视图的底部:

if(ViewBag.CurrentId != null) //draw a form for ResultModel items
{
 // What should I do now? 
 // how cant I use Html.EditorFor(m=>...) if the Model is still List<CompetencyModel>
}

我需要到一个ResultModel实体来设置一个Score属性值。

谢谢。

1 个答案:

答案 0 :(得分:0)

你应该能够使用Linq完成这项工作。考虑在最后一个if语句中使用以下代码段

var result = Model.Results.FirstOrDefault(r => r.Id == ViewBag.CurrentId);

我没有IDE,所以要注意syntext错误