0

默认值 0 正在蔓延到我正在开发的调查应用程序中,我看不到任何原因。问题如下:

我有一组 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 个问题,所以我将问题文本放在一个表中,并将结果存储在另一个表中。我已将问题放入我的表单视图模型(因此是 Model.Questions);问题表有一个名为 QuestionColumn 的字段,它允许我将答案表列链接到问题,如上所示(<%= Html.RadioButton(col, "1")%> 等)

[/笔记]

但是,当用户没有回答问题时,值 0 将被插入到数据库列中。如果用户没有选择任何单选按钮,我会期望 Null。

结果,我没有得到我期望的结果,即由于 null 值(没有用户输入)导致的验证错误。

我在任何地方都没有为答案表中的字段规定默认值 0。

那么发生了什么?有任何想法吗?

4

2 回答 2

1

我想我已经破解了它:

由于SurveyAnswers 表有一个不可为空的字段列表(代表用户输入),因此dbml 文件中Linq to Sql 生成的类具有字节类型的字段。

因此,当 MVC 创建一个新的 SurveyAnswer 对象以添加 Forms 值时,字节类型字段的默认值为 0。如果在 Form 中未更改此值,则它保持为 0,这就是发送的内容到数据库。我期待空。Nicholas 也可能是对的:当没有选择任何单选按钮时,浏览器返回值 0。活到老,学到老。我会检查 Nicholas 的帖子作为答案。

为了解决这个问题,我正在执行以下操作:

为 SurveyAnswers 中的每个字段(其中有 70 多个......)编写一个检查约束,将输入限制为 (namefield > 0 AND nameField < 4)。这样我保证只有有效的数据进入调查。

由于这些检查约束,在 Controller 中为 POST 操作启动的数据库更新将失败,并且在 catch 块中,我可以向 ModelState 添加验证消息并返回到输入 View。

于 2010-04-01T10:13:49.360 回答
0

由于您没有将任何按钮设置为默认值,因此浏览器可能会提供自己的值 - 在本例中为 0。

根据w3.org,作者应确保在每组单选按钮中,一个最初是“打开”的

于 2010-03-31T14:55:23.610 回答