0

デフォルト値の 0 が、開発中の Surveys アプリに忍び寄っていますが、理由はわかりません。問題は次のとおりです。

ユーザーがアンケートの質問に回答するために選択できる値を表す Html.RadioButtons のグループがあります (1 == まったくない、2 == 少し、3 == 多くある)。各質問への回答を格納するために、null を許可しない tinyint データ型を使用しました。

ビューのコードは次のようになります。

<ol class="SurveyQuestions">
    <% foreach (SurveyQuestion question in Model.Questions)
       {  

             string col = question.QuestionColumn;     
    %>

        <li><%=question.QuestionText%>
            <ul style="float:right;" class="MultiChoice">
                <li><%= Html.RadioButton(col, "1")%></li>
                <li><%= Html.RadioButton(col, "2")%></li>
                <li><%= Html.RadioButton(col, "3")%></li>
            </ul>
            <%= Html.ValidationMessage(col, "*") %>
        </li>
    <% } %>

</ol>

[上記のコードに関する注意:]

各アンケートには約 70 の質問があるため、質問のテキストを 1 つのテーブルに配置し、結果を別のテーブルに保存しました。質問をフォーム ビュー モデルに入れました (したがって、Model.Questions)。質問テーブルには、上に示すように、回答テーブルの列を質問にリンクできる QuestionColumn というフィールドがあります (<%= Html.RadioButton(col, "1")%> など)。

[/ノート]

ただし、ユーザーが質問に答えない場合、値 0 がデータベース列に挿入されます。ユーザーがラジオボタンを選択しない場合、Null が期待されます。

その結果、期待どおりの結果が得られません。つまり、null 値 (ユーザー入力なし) による検証エラーです。

Answers テーブルのフィールドのデフォルト値を 0 と規定したことはありません。

それで、何が起こっているのですか?何か案は?

4

2 に答える 2

1

私はそれをクラックしたと思います:

SurveyAnswers テーブルには NULL 不可フィールド (ユーザー入力を表す) のリストがあるため、Linq to Sql によって dbml ファイルに生成されたクラスには、バイト型のフィールドがあります。

その結果、MVC が Forms 値を追加する新しい SurveyAnswer オブジェクトを作成するとき、バイト型フィールドのデフォルト値は 0 です。この値が Form で変更されていない場合、値は 0 のままであり、それが送信されます。データベースに。私はヌルを期待していました。Nicholas も正しいかもしれません。ラジオ ボタンがどれも選択されていない場合、ブラウザーは値 0 を返します。生活し、学びます。答えとしてニコラスの投稿を確認します。

これを解決するために、次のことを行っています。

入力を (namefield > 0 AND nameField < 4) に制限する、SurveyAnswers の各フィールド (70 以上あります...) のチェック制約を記述します。そうすれば、有効なデータのみが調査に使用されることが保証されます。

これらのチェック制約の結果、POST アクションのために Controller で開始されたデータベースの更新は失敗し、catch ブロックで検証メッセージを ModelState に追加して、入力ビューに戻ることができます。

于 2010-04-01T10:13:49.360 に答える
0

どのボタンもデフォルトのチェック済みとして設定していないため、ブラウザが独自の値 (この場合は 0) を提供している可能性があります。

w3.orgによると、作成者はラジオ ボタンの各セットで、最初は「オン」になっていることを確認する必要があります。

于 2010-03-31T14:55:23.610 に答える