asp.net-mvc – ASP.NET MVC Html.RadioButton异常

我在我的页面上看到一个简单的单选按钮列表,我在以下视图中呈现:
<label for="gender">Gender</label>
<%= Html.RadioButton("gender",1) %> Male
<%= Html.RadioButton("gender",2) %> Female
<%= Html.ValidationMessage("gender") %>

请注意,当用户最初看到此输入时,两个按钮均未选中。
验证是强制他们选择并不接受认。
因此,这两个单选按钮被绑定到一个可空的int属性,在我的模型中声明为:

public int? gender { get; set; }

所以如果他们没有选择一个按钮并提交该页面,那么gender属性将为空,表示它们没有被选择。控制器在发布过程中调用以下验证:

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,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

解决方法

我只是尝试了一些使这项工作的东西。
如果我不执行验证步骤,但是当然需要验证,则不会出现此问题。
这给了我一个解决方案的线索。

ValidationMessage HtmlHelper方法接受一个字符串参数,该参数是要验证的属性或模型对象的名称
我刚才把这个名字改成“gender2”,如下所示:

<label for="gender">Gender</label>
<%= Html.RadioButton("gender",2) %> Female
<%= Html.ValidationMessage("gender2") %>

而且我更改了验证码来引用这个新名称(即使该属性不存在,它仍然可以使用):

if (!gender.HasValue)
    ModelState.AddModelError("gender2","gender required");

这可以按需要工作。

我会以为其他应该是有效的,但这是一个简单的解决方法,我在这里记录。

编辑:
顺便说一下,我尝试将gender属性更改为字符串而不是可空的int,并发生相同的确切问题。

该工作仍然似乎在为验证消息使用不同的密钥名称

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....