[英]How to use client template expressions in ajax binding of a mvc kendo grid?
我有一個兩層分層網格,我從服務器端綁定到使用ajax。 兩個數據層的ajax讀取工作正常但是我很難使用ClientTemplate基於條件邏輯來呈現我的列。
下面是服務器端綁定版本。 我知道我必須使用ClientTemplate和表達式#=#才能產生相同的效果,但我遇到兩個問題:
將其轉換為表達式將是最有幫助的。
var i = -1;
@(Html.Kendo().Grid<MyViewModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Selected).Title("")
.Template(
@<text>
@{i++;}
@if (Model.Permissions.HasInsertAccess && item.Status == Status.Created)
{
<input type="hidden" name="MyViewModels.Index" value="@i" />
@Html.CheckBoxFor(m => m.MyViewModels[i].Selected)
}
</text>);
columns.Bound(c => c.Id)
.Template(@<text>@Html.HiddenFor(m => m.MyViewModels[i].Id)@item.Id</text>)
請嘗試使用以下代碼段。
視圖
@model MvcApplication1.Models.TestModels
<script type="text/javascript">
var rowNumber = 0;
function resetRowNumber(e) {
rowNumber = 0;
}
function renderNumber(data) {
return ++rowNumber;
}
function renderRecordNumber(data) {
var page = parseInt($("#Grid").data("kendoGrid").dataSource.page()) - 1;
var pagesize = $("#Grid").data("kendoGrid").dataSource.pageSize();
return parseInt(rowNumber + (parseInt(page) * parseInt(pagesize)));
}
</script>
@(Html.Kendo().Grid<MvcApplication1.Models.TestModels>()
.Name("Grid")
.Columns(columns =>
{
columns.Bound(p => p.ID);
columns.Bound(p => p.Name);
columns.Template(t => { }).Title("Row No").ClientTemplate("# if ( '" + @Model.Permissions.HasValue.ToString().ToLower() + "' == 'true') { #" +
"<input type='text' name='MyViewModels.Index' value='#= renderNumber(data) #' /> " +
"# } #");
})
.Pageable(x => x.PageSizes(new int[] { 10, 20, 30, 50 }).Refresh(true))
.Sortable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("Grid_Read", "Home"))
)
.Events(ev => ev.DataBound("resetRowNumber"))
)
CONTROLLER
public ActionResult Index()
{
TestModels model = new TestModels();
model.Permissions = true; //Please comment this line and check
return View(model);
}
public ActionResult Grid_Read([DataSourceRequest] DataSourceRequest request)
{
List<TestModels> models = new List<TestModels>();
for (int i = 0; i < 50; i++)
{
TestModels t1 = new TestModels();
t1.ID = i;
t1.Name = "Name" + i;
models.Add(t1);
}
return Json(models.ToDataSourceResult(request));
}
模型
public class TestModels
{
[Display(Name = "ID")]
public int ID { get; set; }
[Display(Name = "Name")]
public string Name { get; set; }
public bool? Permissions { get; set; }
}
請嘗試使用上面的代碼段。 如果有任何疑慮,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.