控制器端我有ViewBag.CanAddNewStudent = Convert.ToBoolean(Request.Cookies["SignInOption"]["Can Add New Student"].Split(',')[0]);
在视图侧,我将隐藏字段作为
<input type="hidden" id="HiddenCanAddNewStudent" value="@ViewBag.CanAddNewStudent">
<label>@ViewBag.CanAddNewStudent</label>
在隐藏字段中,我得到值=“value”,而不是布尔值。
5条答案
按热度按时间z9smfwbn1#
这是Razor V2中引入的一个名为条件属性的特性的一个不幸的副作用。如果属性的值是
bool
,它将重复该属性,并且设计用于checked
或disabled
等属性中,在这些属性中您可以使用bool
值,如果值是true
,它将生成checked="checked"
或disabled="disabled"
,但是如果该值是false
,则该属性将被省略。您可以在Cleaner Conditional HTML Attributes In Razor Web Pages和Applying Conditional Attributes in ASP.NET MVC Views中了解有关此功能的详细信息
要生成隐藏输入,可以使用
除了
id="HiddenCanAddNewStudent"
属性之外,它还将包括name="HiddenCanAddNewStudent"
属性。然而,MVC处理这个问题的方法是使用一个视图模型,该模型包括bool的属性并在将模型传递给视图之前设置该属性的值,然后在视图中
dw1jzc5e2#
这就是布尔值在HTML中通常的工作方式(例如,在复选框中)--逻辑值不是由属性value的值来表示,而是由它的存在来表示(如果标签有这个属性,则值为true,否则为false),这种逻辑应用于隐藏字段确实很奇怪,但可能框架就是这样工作的。
无论如何,我建议将布尔值转换为字符串,并将该字符串赋给字段。从本质上讲,隐藏字段的值是字符串,而不是布尔值。
fykwrbwg3#
在视图顶部,获取布尔变量并将viewbag值保存在其中,然后将该变量传递到隐藏字段。
ax6ht2ek4#
查看(html)
jQuery
$('#HiddenCanAddNewStudent').text();
//查看包的值。可以添加新学生prdp8dxp5#
如果您想使用输入标记,请尝试以下操作
这将在jQuery中返回true,并在HTML中显示value =“True”