控制器方面我有
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>
答案 0 :(得分:3)
这是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
中详细了解此功能要生成隐藏输入,您可以使用
@Html.Hidden("HiddenCanAddNewStudent", ViewBag.CanAddNewStudent)
除了name="HiddenCanAddNewStudent"
属性外,还会包含id="HiddenCanAddNewStudent"
属性。但是,处理此问题的MVC方法是使用包含bool属性的视图模型
public bool CanAddNewStudent { get; set; }
并在将模型传递给视图之前设置该属性的值,然后在视图中
@Html.HiddenFor(m => m.CanAddNewStudent)
答案 1 :(得分:0)
布尔值通常在HTML中起作用(例如,在复选框中) - 逻辑值不是由属性值的值表示,而是由其存在表示(如果标记具有此属性,则值为true ,否则为假)。这个逻辑应用于隐藏字段真的很奇怪,但框架可能就是这样工作的。
无论如何,我建议将布尔值转换为字符串并将该字符串分配给字段。就其性质而言,隐藏字段的值是字符串,而不是布尔值。
答案 2 :(得分:0)
在View的顶部取布尔变量并将viewbag值保存在其中,然后将该变量传递给隐藏字段。
@{
bool _canAddNewStudent=Convert.ToBoolean(Viewbag.CanAddNewStudent);
}
<input type="hidden" id="HiddenCanAddNewStudent" value="@_canAddNewStudent">
答案 3 :(得分:0)
查看(HTML)
<label id="HiddenCanAddNewStudent" style="display:none;">@ViewBag.CanAddNewStudent</label>
的jQuery
$('#HiddenCanAddNewStudent').text();
// ViewBag.CanAddNewStudent的值