我的页面上有一个简单的单选按钮列表,我在视图中使用以下内容进行渲染:
<label for="gender">Gender</label>
<%= Html.RadioButton("gender", 1) %> Male
<%= Html.RadioButton("gender", 2) %> Female
<%= Html.ValidationMessage("gender") %>
请注意,当用户最初看到此输入时,两个按钮都未被选择。
验证是为了迫使他们选择而不接受默认值。
因此,这两个单选按钮绑定到我的模型中声明为 null 的 int 属性:
public int? gender { get; set; }
因此,如果他们没有选择按钮并提交页面,则性别属性将为 null,表明他们没有选择。控制器在发布期间调用以下验证:
if (!gender.HasValue)
ModelState.AddModelError("gender", "gender required");
但是,如果验证失败(他们没有选择),那么在渲染阶段,MVC 框架会抛出以下异常:
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
在寻找这个问题的解决方案时,我注意到有几个人遇到了这个问题。
我正在使用 ASP.NET MVC 1.0。我在代码中找到了使用 .NET Reflector 引发此错误的位置。
问题是如何使其正确工作?
编辑:添加堆栈跟踪:
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
Source="System.Web.Mvc"
StackTrace:
at System.Web.Mvc.HtmlHelper.GetModelStateValue(String key, Type destinationType)
at System.Web.Mvc.Html.InputExtensions.InputHelper(HtmlHelper htmlHelper, InputType inputType, String name, Object value, Boolean useViewData, Boolean isChecked, Boolean setId, Boolean isExplicitValue, IDictionary`2 htmlAttributes)
at System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value, Boolean isChecked, IDictionary`2 htmlAttributes)
at System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value, IDictionary`2 htmlAttributes)
at System.Web.Mvc.Html.InputExtensions.RadioButton(HtmlHelper htmlHelper, String name, Object value)
at ASP.views_vbs_register_aspx.__RenderregisterContent(HtmlTextWriter __w, Control parameterContainer) in c:\Users\David\Documents\BellevueProject\Bellevue\BellevueTeachers\Forms\Views\VBS\Register.aspx:line 42