Html.RadioButton组默认为0

时间:2010-03-31 14:10:54

标签: asp.net-mvc radio-button default-value tinyint

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

[/注]

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

因此,我得不到我的期望,即由于空值(没有用户输入)导致的验证错误。

我没有为答案表中的字段规定默认值0。

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

2 个答案:

答案 0 :(得分:1)

我想我已经破解了它:

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

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

要解决此问题,我正在执行以下操作:

为SurveyAnswers中的每个字段(其中有超过70个......)编写检查约束,将输入限制为(namefield&gt; 0和nameField&lt; 4)。这样我保证只有有效的数据进入调查。

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

答案 1 :(得分:0)

由于您没有将任何按钮设置为默认选项,因此浏览器可能会提供自己的值 - 在这种情况下为0。

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