質問

デフォルトのバインダーを使用してネストされたリストにバインドするのに問題があります。私はlinq to sqlを使用しており、次のデータ構造を持っています

コンペティション<!> lt;コンペティション質問<!> lt; CompetitionQuestionChoices

私のhtmlは次のとおりです

<%= Html.Hidden("Competition.Id",Model.Competition.Id) %>
 <%=Html.TextBox("Competition.CompetitionName", Model.Competition.CompetitionName )%>

<%= Html.TextBox("Competion.CompetitionQuestions[0].Id", Model.CompetitionQuestion.Id)%>
<%= Html.TextBox("Competion.CompetitionQuestions[0].Question", Model.CompetitionQuestion.Question )%>

<%= Html.TextBox("Competion.CompetitionQuestions[0].CompetitionQuestionChoices[0].Id", Model.CompetitionQuestionChoices.Id)%>

<%= Html.TextBox("Competion.CompetitionQuestions[0].CompetitionQuestionChoices[0].Choice", Model.CompetitionQuestionChoices.Choice)%>

コントローラーで試しました

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Save([Bind(Prefix="Competition")]Competition competition)
{

}

これにより、競争はできますが、子要素はありません

HTML内のリストに競争プレフィックスがなく、各コレクションに個別にバインドすることで、より成功しました。例:

UpdateModel(competition,"Competition");
UpdateModel(competition.CompetitionQuestions,"competitionQuestions");

ただし、2つのプレフィックスが必要であり、宣言方法がわからないため、competitionQuestionChoicesでこれを機能させることはできません

ご協力ありがとうございます。

役に立ちましたか?

解決

.Net 3.5のassignメソッドの問題が原因であったことが判明しました。.Net4をターゲットにした後、バインドは正しく機能しました。詳細は、投稿をご覧ください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top