【问题标题】:Not able to set value of hidden field using viewbag when value is type of bool.当值为布尔类型时,无法使用 viewbag 设置隐藏字段的值。
【发布时间】:2016-09-10 05:54:07
【问题描述】:

我有控制器端

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="value" 而不是布尔值。

【问题讨论】:

  • 当我将值作为字符串传递时是可能的 ViewBag.CanAddNewStudent = Request.Cookies["SignInOption"]["Can Add New Student"].Split(',')[0];我不明白布尔值有什么问题。 @Html.Hidden("HiddenCanAddNewStudent", (bool)ViewBag.CanAddNewStudent) 也在工作,唯一的问题是

标签: html .net asp.net-mvc


【解决方案1】:

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

【讨论】:

  • 感谢您的解释
【解决方案2】:

这就是布尔值通常在 HTML 中的工作方式(例如,在复选框中)——逻辑值不是由属性值的值来表示,而是由它的存在来表示(如果标签具有此属性,则值为 true ,否则为假)。这个逻辑被应用到隐藏字段上真的很奇怪,但框架可能是这样工作的。

无论如何,我建议将布尔值转换为字符串并将此字符串分配给字段。就其本质而言,隐藏字段的值是字符串,而不是布尔值。

【讨论】:

  • 正如我在评论中提到的,当我传递字符串值时它正在工作,但我无法理解“隐藏字段”的奇怪行为。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    视图(html)

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

    jQuery $('#HiddenCanAddNewStudent').text(); //ViewBag.CanAddNewStudent 的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多