加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 00:27:36 所属栏目:asp.Net 来源:网络整理
导读:我在我的页面上看到一个简单的单选按钮列表,我在以下视图中呈现: label for="gender"Gender/label%= Html.RadioButton("gender",1) % Male%= Html.RadioButton("gender",2) % Female%= Html.ValidationMessage("gender") % 请注意,当用户最初看到此输入时
我在我的页面上看到一个简单的单选按钮列表,我在以下视图中呈现:
<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:UsersDavidDocumentsBellevueProjectBellevueBellevueTeachersFormsViewsVBSRegister.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,并发生相同的确切问题。

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读