Шаблон пользовательского логического редактора в ASP.NET

У меня есть требование создать шаблон редактора в 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, заполненными для работы привязки модели?


person Adam    schedule 21.09.2018    source источник


Ответы (1)


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

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

@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" })
person Adam    schedule 24.09.2018