6

ラジオ ボタンのマトリックスで構成された mvc ビューがあります。ラジオ ボタンの各行はグループに属し、モデルから型指定されたオブジェクトを表します。さまざまなブログや投稿のガイダンスを使用して、投稿されたフォームの結果をコントローラーアクションの型付きモデル配列に正常にバインドしましたが、効果を元に戻し、既存のモデルをラジオボタンにバインドしながら、選択状態または選択解除状態を維持することはできません.

私のモデルには「AnswerValue」というプロパティが含まれており、これは 0 から 4 の間であり、ラジオボタンの名前と一致する必要があります。インデックス値をモデル値「AnswerId」に変更しようとしましたが、そうすると機能していたバインディングが機能しなくなりました(インデックスはゼロベースでなければならないと思います)。これまでにこの投稿で使用したいくつかのリソースと、 Scott Hanselman による記事を使用して、現在の場所にたどり着きました。

この双方向バインディングを実行する方法について誰かが洞察を持っていれば、それは大歓迎です。

ありがとう

私のコントローラー:

[AcceptVerbs(HttpVerbs.Post)]
  public ActionResult Save([Bind(Prefix = "SurveyAnswer")] SurveyAnswer[] responses, int SurveyID)
  {

私の見解:

<%
  int questionIndex = 0; 
  foreach (SurveyAnswer q in Model)
  {

%>
  <%=Html.Hidden("SurveyAnswer.Index", questionIndex)%>
  <%=Html.Hidden("SurveyAnswer["+questionIndex+"].AnswerId", q.AnswerId) %>
  <tr>
    <td style='background-color: #aaaaaa;padding-left: 10px; padding-right: 10px;border-right: solid 1px #fffff;'><%= questionIndex+1 %></td>
    <td style='text-align: right;'><%= q.Question.DisplayValue %></td>
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td>
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue"})%></td>
    <td><%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", new { name = "SurveyAnswer[" + questionIndex + "].AnswerValue" })%></td>
  </tr>
<%
    questionIndex++; 
  }
%>
4

1 に答える 1

6

ラジオ ボタン自体は、True/False 以外の (状態に関して) 値を認識しません。したがって、値を実際の位置と比較し、TRUE / FALSE 状態を明示的に設定する必要があります。

このラジオ ボタン ヘルパーのオーバーロードを試してください。

<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "0", q.AnswerValue == 0)%>
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "1", q.AnswerValue == 1)%>
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "2", q.AnswerValue == 2)%>
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "3", q.AnswerValue == 3)%>
<%=Html.RadioButton("SurveyAnswer[" + questionIndex + "].AnswerValue", "4", q.AnswerValue == 4)%>

ViewModel を使用している場合は、この論理的な質問 ( q.AnswerValue == 4) をビューに直接配置するのではなく、そこに配置した方がよいかもしれません。

PS:最初のパラメーターは既に ID と名前の属性を に設定しているため、最後のパラメーターを削除できると思います。"SurveyAnswer[" + questionIndex + "].AnswerValue"

于 2009-12-09T16:43:13.913 に答える