我在我的页面上有一个简单的单选按钮列表,我在视图中使用以下内容进行渲染:
<label for="gender">Gender</label>
<%= Html.RadioButton("gender", 1) %> Male
<%= Html.RadioButton("gender", 2) %> Female
<%= Html.ValidationMessage("gender") %>
Run Code Online (Sandbox Code Playgroud)
请注意,当用户最初看到此输入时,两个按钮都未被选中.验证是强制他们选择而不是接受默认值.因此,这两个单选按钮绑定到我的模型中的可空int属性,声明为:
public int? gender { get; set; }
Run Code Online (Sandbox Code Playgroud)
因此,如果他们没有选择按钮并提交页面,则gender属性将为null,表示他们没有选择.在帖子期间,控制器调用以下验证:
if (!gender.HasValue)
ModelState.AddModelError("gender", "gender required");
Run Code Online (Sandbox Code Playgroud)
但是,如果验证失败(他们没有选择),那么在呈现阶段,MVC框架将抛出以下异常:
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
Run Code Online (Sandbox Code Playgroud)
在寻找这个问题的解决方案时,我注意到有几个问题.我正在使用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 …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×1