在MVC中转换razor html复选框的Y / N值

时间:2018-07-03 18:23:30

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

我正在用剃须刀for loop从模型中读取Y / N值。

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

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

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

是否可以在不创建服务器视图模型的情况下执行此操作?

1 个答案:

答案 0 :(得分:0)

此声明完全错误:

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

CheckBoxFor帮助程序仅接受boolNullable<bool>类型的viewmodel属性进行模型绑定,因此不应使用上述条件表达式。如果要将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属性和简单JS技巧的input,标准HTML type="checkbox"元素:

查看

@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>