我在將自定義EditorTemplate連接到MVC 5應用程序中的網格時遇到困難。我有一個整數字段只接受1或2作爲值。我不想使用標準數字文本框或滑塊控件,而是使用按鈕(通過Bootstrap的組按鈕)將其連接起來。如果用戶點擊第一個按鈕,值應該設置爲1,否則應該設置爲2.綁定Kendo網格的編輯器模板
我遇到的問題是,當用戶單擊「編輯」按鈕時, 「級別」值永遠不會應用於編輯器模板。模板顯示爲我想要的,但我無法弄清楚如何將選定的值綁定回Kendo網格。當用戶點擊網格上的「保存」按鈕時,控制器操作從不被調用。
如果我用一個標準的Kendo控件(如數字文本框或Kendo滑塊)替換編輯器模板,它可以正常工作。
視圖模型
public class LotViewModel
{
public int LotId { get; set; }
[Display(Name = "Level")]
[Range(1, 2)]
[UIHint("LotLevel")]
public int Level { get; set; }
}
查看
@(Html.Kendo().Grid<LotViewModel>()
.Name("lotGrid")
.Columns(columns =>
{
columns.Bound(x => x.LotId).Visible(false);
columns.Bound(x => x.Level);
columns.Command(command =>
{
command.Edit();
}).Width(100);
})
.ToolBar(toolbar => toolbar.Create())
.Editable(editable => editable.Mode(GridEditMode.InLine))
.AutoBind(true)
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(m => m.LotId);
model.Field(m => m.Level).DefaultValue(1);
})
.Read(update => update.Action("GetLots", "Lot"))
.Create(update => update.Action("CreateLot", "Lot"))
.Update(update => update.Action("UpdateLot", "Lot"))
)
)
EditorTemplate:LotLevel
@model int
@{
var levelOne = Model.Equals(1) ? "active btn-primary" : null;
var levelTwo = Model.Equals(2) ? "active btn-primary" : null;
var htmlField = ViewData.TemplateInfo.HtmlFieldPrefix;
}
@Html.HiddenFor(model => model)
<div class="btn-group [email protected]">
<button type="button"
class="btn btn-default @levelOne [email protected]"
onclick="javascript: setValue(this, 1);">
Level 1
</button>
<button type="button"
class="btn btn-default @levelTwo [email protected]"
onclick="javascript:setValue(this, 2);">
Level 2
</button>
</div>
<script>
function setValue(button, level) {
$('[email protected] button.active').removeClass('active btn-primary');
$(button).addClass('active btn-primary');
$('#@htmlField').val(level); // TODO: Set the value of the model here
}
</script>