当值为bool的类型时,无法使用viewbag设置隐藏字段的值。

时间:2016-09-10 05:54:08

标签: html .net asp.net-mvc

控制器方面我有

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> 

在隐藏字段中,我得到值=&#34;值&#34;而不是布尔值。enter image description here

4 个答案:

答案 0 :(得分:3)

这是Razor V2中引入的一个称为条件属性的功能的不幸副作用。如果属性的值为bool,则会重复该属性,并且设计用于checkeddisabled等属性,您可以使用bool值和如果值为true,则会生成checked="checked"disabled="disabled",但如果值为false,则该属性将被省略。

您可以在Cleaner Conditional HTML Attributes In Razor Web PagesApplying 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的值