.net 当值为布尔类型时,无法使用viewbag设置隐藏字段的值,

ujv3wf0j  于 2023-02-01  发布在  .NET
关注(0)|答案(5)|浏览(200)

控制器端我有
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”,而不是布尔值。

z9smfwbn

z9smfwbn1#

这是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)

除了id="HiddenCanAddNewStudent"属性之外,它还将包括name="HiddenCanAddNewStudent"属性。然而,MVC处理这个问题的方法是使用一个视图模型,该模型包括bool的属性

public bool CanAddNewStudent { get; set; }

并在将模型传递给视图之前设置该属性的值,然后在视图中

@Html.HiddenFor(m => m.CanAddNewStudent)
dw1jzc5e

dw1jzc5e2#

这就是布尔值在HTML中通常的工作方式(例如,在复选框中)--逻辑值不是由属性value的值来表示,而是由它的存在来表示(如果标签有这个属性,则值为true,否则为false),这种逻辑应用于隐藏字段确实很奇怪,但可能框架就是这样工作的。
无论如何,我建议将布尔值转换为字符串,并将该字符串赋给字段。从本质上讲,隐藏字段的值是字符串,而不是布尔值。

fykwrbwg

fykwrbwg3#

在视图顶部,获取布尔变量并将viewbag值保存在其中,然后将该变量传递到隐藏字段。

@{
    bool _canAddNewStudent=Convert.ToBoolean(Viewbag.CanAddNewStudent);
}

<input type="hidden" id="HiddenCanAddNewStudent" value="@_canAddNewStudent">
ax6ht2ek

ax6ht2ek4#

查看(html)

<label id="HiddenCanAddNewStudent" style="display:none;">@ViewBag.CanAddNewStudent</label>

jQuery $('#HiddenCanAddNewStudent').text();//查看包的值。可以添加新学生

prdp8dxp

prdp8dxp5#

如果您想使用输入标记,请尝试以下操作

<input type="hidden" id="HiddenCanAddNewStudent" value=@Convert.ToString(ViewBag.CanAddNewStudent)>

这将在jQuery中返回true,并在HTML中显示value =“True”

相关问题