複合リストへのMVCデフォルトモデルバインディング
-
22-07-2019 - |
質問
デフォルトのバインダーを使用してネストされたリストにバインドするのに問題があります。私は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をターゲットにした後、バインドは正しく機能しました。詳細は、投稿をご覧ください。
所属していません StackOverflow