2009-12-09 6 views
6

ラジオボタンのマトリックスで構成されたmvcビューがあります。ラジオボタンの各行はグループ内にあり、モデルの型付きオブジェクトを表します。さまざまなブログや投稿のガイダンスを使用して、投稿されたフォーム結果をコントローラーアクションの型付きモデル配列に結びつけましたが、効果を元に戻したり、既存のモデルをラジオボタンにバインドしたりすることはできません。型のモデルを使用したモデルのラジオボタンリストへの2ウェイデータバインディング

私のモデルには、 "AnswerValue"という名前の0から4の間のプロパティがあり、ラジオボタンの名前と一致する必要があります。私は、モデル値 "AnswerId"にインデックス値を変更しようとしましたが、そうしているとバインディングが機能しなくなりました(私はインデックスがゼロベースでなければならないと考えています)。ここで私がこれまで使用してきたいくつかのリソースは、PostArticle by 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++; 
    } 
%> 

答えて

6

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

ラジオボタンヘルパーのこのオーバーロードを試してください。あなたはViewModelにを使用している場合

<%=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)%> 

、多分それは、ビュー内で直接そこにこのロジック質問(q.AnswerValue == 4)を置く代わりにする方が良いでしょう。

PS:私は拡張するための良い方法であるもの、エンティティフレームワークと生成されたエンティティセットのを使用していた場合"SurveyAnswer[" + questionIndex + "].AnswerValue"

+1

:私は最初はすでににIDと名前atributesを設定して、あなたが最後のパラメータを削除することができると思いますこれはあなたの推薦されたロジックを保持する。これまでの助けてくれてありがとう。仕事をしているようだ。 – Jeremy

+0

ViewModelパターンを使用していないのであれば、コントローラーのロジックの変更、ビューの見た目のモデルタイプ、おそらくあなたの検証プロシージャーを変更する必要があるかもしれません。複雑なモデル(2つ以上のエンティティセットが単一のフォームに組み合わされているか、SelectList/RadioButtons/..をセットアップするようなもの)を持っている場合には、ほとんどが使用されます。このパターンの詳細をチェックしたい場合は、http:// geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspxまたはScottGuのASP.NET MVC 1.0ブックの「ViewModelパターンの使用」のセクションを参照してください。 – JOBG

関連する問題