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

前端之家收集整理的这篇文章主要介绍了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,并发生相同的确切问题。

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

猜你在找的asp.Net相关文章