【问题标题】:Convert Y/N values of razor html checkbox in MVC在 MVC 中转换 razor html 复选框的 Y/N 值
【发布时间】:2018-07-03 18:23:29
【问题描述】:

我在剃刀 for 循环中从我的模型中读取 Y/N 值。

我想将值从 Y/N 更改为 true/false。

<td>@Html.CheckBoxFor(modelItem => (item.ReqDowngrade == "Y" ? true : false))</td>

我不断收到此错误:System.InvalidOperationException: '模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。'

有什么方法可以在不创建服务器视图模型的情况下做到这一点?

【问题讨论】:

  • 从控制器发送解析数据。要么你可以发送真假值
  • >有什么方法可以在不创建服务器视图模型的情况下做到这一点?听起来视图模型正是您想要的。
  • 您的属性必须是 bool 才能使用 CheckBoxFor() - 使用视图模型(无论如何在编辑数据时都必须这样做)

标签: asp.net-mvc razor html-helper


【解决方案1】:

这个声明是完全错误的:

@Html.CheckBoxFor(modelItem => (item.ReqDowngrade == "Y" ? true : false))

CheckBoxFor helper 仅接受具有boolNullable&lt;bool&gt; 类型的视图模型属性用于模型绑定,因此不应使用上面的条件表达式。如果您想将 YN 值分配给与 CheckBoxFor 绑定的新 bool viewmodel 属性,请改为:

视图模型

// assumed both 'ReqDownGrade' & new bool property are in same viewmodel class 
public bool CheckReqDownGrade 
{
   get
   {
       // returns false if ReqDownGrade is 'N'
       return (ReqDownGrade == "Y");
   }
   set
   {
       CheckReqDownGrade = value;
       CheckReqDownGrade == true ? ReqDownGrade = "Y" : ReqDownGrade = "N";
   }
}

查看

@Html.CheckBoxFor(model => model.CheckReqDownGrade)

如果您仍然坚持不添加bool viewmodel 属性,您可以使用HiddenFor、标准HTML input 元素和type="checkbox" 属性和简单的JS 技巧:

查看

@Html.HiddenFor(modelItem => item.ReqDowngrade, new { id = "ReqDownGrade" })

<input id="CheckReqDownGrade" type="checkbox" @(item.ReqDowngrade == "Y" ? "checked='checked'" : "") />

JS (jQuery)

<script>
$(function() {
    $('#CheckReqDownGrade').click(function() {
        var isChecked = $(this).is(':checked');

        $('#ReqDownGrade').val(isChecked ? 'Y' : 'N');
    });
});
</script>

【讨论】:

  • CheckBoxFor() 不接受 Nullable&lt;bool&gt; 的属性
  • 感谢您的意见。我创建了视图模型。
猜你喜欢
  • 2016-02-25
  • 2012-11-28
  • 2013-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-28
相关资源
最近更新 更多