私はこの問題で立ち往生しています。
私はこのように定義されたモデル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つだけです。このビューには、@ modelリストがあり、各アイテムの[編集]ボタンが付いたCompetencyModelアイテムのリストが表示されます。[編集]ボタンをクリックすると、CompetencyModelのIDが同じビューに渡され、ビューは、選択したCompetencyModelに属するResultModelアイテムの編集フォームを描画します。
ただし、ResultModelアイテムのフォームは同じビューに存在し、ビューのモデルは引き続き@modelListです。
ResultModelアイテムごとにバインド可能なHtml.EditorFor(m => 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プロパティに値を設定する必要があります。
ありがとうございました。