gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:28:15 25 4
gpt4 key购买 nike

我的页面上有一个简单的单选按钮列表,我在 View 中使用以下内容进行渲染:

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

请注意,当用户最初看到此输入时,两个按钮都未被选择。验证是为了迫使他们选择而不接受默认值。因此,这两个单选按钮绑定(bind)到我的模型中声明为 null 的 int 属性:

public int? gender { get; set; }

因此,如果他们没有选择按钮并提交页面,则性别属性将为 null,表明他们没有选择。 Controller 在发布期间调用以下验证:

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

最佳答案

我刚刚尝试了一些可以实现此功能的方法。如果我不执行验证步骤,则不会出现问题,但我当然需要验证。这给了我解决方案的线索。

ValidationMessage HtmlHelper 方法采用一个字符串参数,该参数是正在验证的属性或模型对象的名称。我刚刚将该名称更改为“gender2”,如下所示:

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

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

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

这可以按预期工作。

我本以为另一个应该可以工作,但这是一个简单的解决方法,我在这里记录了这一点。

编辑:顺便说一句,我尝试将性别属性更改为字符串而不是可为空的整数,并且出现了同样的问题。

解决方法似乎仍然是为验证消息使用不同的 key 名称。

关于asp.net-mvc - ASP.NET MVC Html.RadioButton 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com