0

私はこの問題で立ち往生しています。

私はこのように定義されたモデル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プロパティに値を設定する必要があります。

ありがとうございました。

4

1 に答える 1