默认值为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。
那发生了什么?有什么想法吗?
答案 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作者应该确保在每组单选按钮中最初一个“开启”