ASP.NET中的自定义布尔编辑器模板

时间:2018-09-21 15:51:19

标签: asp.net boolean model-binding mvc-editor-templates

我需要在ASP.NET中为类型Boolean的模型创建编辑器模板。模板应包含一个按钮,该按钮的值将显示“ =”或“!=”。例如。, Boolean Button

当用户单击按钮时,应该将布尔值取反并提交表单。

我从这一行开始模板,

@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 :(得分:0)

我设法通过编辑隐藏字段来解决它。

编辑器模板,

@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" })