MVC 5 Razor更改HiddenFor helper中的布尔值
问题是Razor(MVC5)错误地渲染了HiddenFor和HiddenHelper 我有这样一个视图模型:MVC 5 Razor更改HiddenFor helper中的布尔值,razor,hidden,asp.net-mvc-5,Razor,Hidden,Asp.net Mvc 5,问题是Razor(MVC5)错误地渲染了HiddenFor和HiddenHelper 我有这样一个视图模型: public class MyViewModel { public bool BoolValueInsideViewModel { get; set; } public MyViewModel() { BoolValueInsideViewModel = false; } } @model MyViewModel @Html.Hidde
public class MyViewModel
{
public bool BoolValueInsideViewModel { get; set; }
public MyViewModel()
{
BoolValueInsideViewModel = false;
}
}
@model MyViewModel
@Html.Hidden("BoolValueInsideViewModel", false)
@Html.Hidden("BoolValueNotInViewModel", false)
控制器简单如下:
model = new MyViewModel();
model.BoolValueInsideViewModel = false;
return PartialView("_MyView", model);
第二行只是为了确保值设置为false。
视图如下所示:
public class MyViewModel
{
public bool BoolValueInsideViewModel { get; set; }
public MyViewModel()
{
BoolValueInsideViewModel = false;
}
}
@model MyViewModel
@Html.Hidden("BoolValueInsideViewModel", false)
@Html.Hidden("BoolValueNotInViewModel", false)
但在浏览器上,我看到:
<input data-val="true" data-val-required="The BoolValueInsideViewModel field is required." id="BoolValueInsideViewModel" name="BoolValueInsideViewModel" type="hidden" value="true">
<input id="BoolValueNotInViewModel" name="BoolValueNotInViewModel" type="hidden" value="False">
请注意,我在同一控制器中有15个其他视图模型和控制器方法,它们可以很好地处理相同的代码(我通常对强类型值使用HiddenFor,这里我改为Hidden,以表明它即使在视图中使用硬编码值也不起作用)
在视图上放置一个断点,表明该模型实际上具有等于false的BoolValueInsideViewModel,但在浏览器上的结果不同。我还通过jQueryPost回调得到结果,所以我检查了从AJAX函数返回的原始字符串,其中的值也是“True”而不是false
我尝试的是:
奇怪的是,我在视图模型上没有任何数据注释,但为什么它在HTML元素上包含数据验证属性?对我来说,这是因为我的url有一个与viewmodel属性同名的查询参数。似乎模型绑定器正在用查询字符串中的值覆盖模型值 我已经通过更改和删除查询字符串参数和值确认了这一点,并获得了一致的结果 比如说,
showMore=False
True
Model的值。showMore
将为True
@HiddenFor(m=>m.showMore)
的值,它将是False
showMore=True
,检查@HiddenFor(m=>m.showMore)
,它将是True
showMore
,检查@HiddenFor(m=>m.showMore)
,它将为True
结论:查询字符串参数值覆盖模型值。不确定这是设计还是错误。请看这个问题:不一样,我在POST请求中没有相同的密钥。但检查请求是个好主意。感谢您提出的类似请求,但我使用了上面链接中的建议,现在可以解决: