Razor Editor для событий Onclick - PullRequest
0 голосов
/ 08 мая 2018

У меня есть логическое значение Nullable, которое представляется в виде флажка с использованием следующего кода:

@Html.EditorFor(m => m.IsInitialStatus, new { htmlAttributes = new { @onclick = "InitialOrStarting()" } })

однако атрибут @onclick не добавляется в HTML при загрузке страницы. Я что-то здесь упускаю? Я взял пример из ответа на этой странице .

Я также рассмотрел вопрос об изменении этого значения на CheckBoxFor, но у меня по-прежнему возникают проблемы с обнуляемыми типами данных Bool.

Любая помощь по этому вопросу будет принята с благодарностью! Я просто хочу установить флажок обнуляемого bool с событием onClick, запускающим функцию Javascript ... Я не самый продвинутый пользователь, но мне кажется, что это сложнее, чем, возможно, следовало бы!?

EDIT

Похоже, существует EditorTemplate для Boolean, который содержит:

@model bool?

@Html.CheckBox("", Model.GetValueOrDefault())

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Событие Onclick не работает для @HtmlEditorFor. Но вы можете использовать атрибут класса.

<script>
    $(".single-checkbox").on("change", function () {
        if ($(".single-checkbox:checked").length > 2) {
            this.checked = false;
            alert ("Only 2 choice")
        }
    });
</script>
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } }) 
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } }) 
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } }) 
@Html.EditorFor(model => model.YourProperty, new { htmlAttributes = new { @class = "single-checkbox" } }) 
0 голосов
/ 09 мая 2018

Вы используете перегрузку EditorFor(), где вторым параметром является additionalViewData. Если у вас не было определенного EditorTemplate для bool?, метод сгенерирует шаблон по умолчанию, который будет <select> с 3 значениями для null, true и false, и включит атрибуты.

Но поскольку у вас есть EditorTemplate, вам нужно добавить атрибуты самостоятельно, считав значение из ViewDataDictionary (обычно EditorTemplate включает в себя несколько элементов html, поэтому метод не может знать, какой элемент вы хотите применить атрибуты к).

Ваш шаблон должен быть

@model bool?
@{ var attributes = ViewData["htmlAttributes"]; }
@Html.CheckBox("", Model.GetValueOrDefault(), attributes)

Сказав это, вы не должны этого делать. A bool? имеет 3 состояния (null, true или false), но флажок имеет только 2 состояния - включено или выключено (переводится в true или false), поэтому ваш EditorTemplate не представляет возможные значения вашей собственности.

Если вы хотите разрешить только true или false, то ваша собственность не должна обнуляться. В качестве альтернативы используйте шаблон по умолчанию, который допускает выбор null (или, если вам нужен альтернативный интерфейс, создайте шаблон, который отображает, например, 3 переключателя)

Кроме того, я рекомендую вам прекратить загрязнять разметку поведением и использовать Ненавязчивый JavaScript - т.е. ваш сценарий будет

$(yourCheckBox).click(function() {
    ... // do something
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...