Конвертировать значения Y / N для бритвы HTML-флажок в MVC - PullRequest
0 голосов
/ 03 июля 2018

Я читаю значение Y / N из моей модели в бритве для цикла.

Я хочу изменить значение с Y / N на true / false.

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

Я получаю эту ошибку: System.InvalidOperationException: 'Шаблоны могут использоваться только с доступом к полям, доступом к свойствам, индексом массива одного измерения или выражениями настраиваемого индексатора с одним параметром.'

Есть ли способ сделать это без создания модели представления сервера?

1 Ответ

0 голосов
/ 05 июля 2018

Это заявление совершенно неверно:

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

CheckBoxFor помощник принимает только свойства viewmodel с типом bool или Nullable<bool> для привязки модели, поэтому не следует использовать приведенное выше условное выражение. Если вы хотите присвоить значение Y или N новому свойству bool viewmodel, связанному с CheckBoxFor, сделайте это вместо:

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:

View

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