Пользовательский шаблон логического редактора в ASP.NET - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть требование создать шаблон редактора в ASP.NET для модели типа Boolean.Шаблон должен состоять из одной кнопки, которая будет отображать '=' или '! =' В качестве значения.Например, логическая кнопка

Когда пользователь нажимает кнопку, он должен инвертировать логическое значение и отправить форму.

Я запускаю шаблон с этой строкой,

@Html.EditorFor(m => m.Negate, "MyBooleanTemplate")

У меня есть пользовательский шаблон редактора, работающий, если я использую TextBox в качестве ввода, и введите False или True, когда форма отправляет, модель выбирает новое значение.

@model Boolean
@Html.TextBoxFor(m => m)

Однако,когда я пытаюсь реализовать пользовательский шаблон, модель никогда не фиксирует изменение значения.

@model Boolean
@{
    string propertyName = Html.ViewData.ModelMetadata.PropertyName;
    string id = Html.IdForModel();
    string displayValue = Model ? "!=" : "=";
    string currentValue = Model.ToString();
    string changeValue = (!Model).ToString();
}

<button type="button" id="@id" name="@propertyName" value="@currentValue" onclick="this.value = '@changeValue'; this.form.submit();" class="btn btn-sm">@displayValue</button>

Правильно ли я считаю, что мне нужен элемент с атрибутами id, name и value, заполненный длямодель привязки к работе?

1 Ответ

0 голосов
/ 24 сентября 2018

Мне удалось решить эту проблему, отредактировав скрытое поле.

Шаблон редактора,

@model Boolean
@{
    string id = Html.IdForModel();
    string displayValue = Model ? "!=" : "=";
    string currentValue = Model.ToString();
    string changeValue = (!Model).ToString();
}
<input asp-for="@Model" type="hidden" />
<button type="submit" onclick="document.getElementById('@id').value = '@changeValue'">@displayValue</button>

И вызванный с помощью,

@Html.EditorFor(m => m.Negate, "BooleanNegate", new { @class = "btn btn-sm" })
...