我需要在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属性的元素,以便模型绑定起作用?
答案 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" })