Сетка Telerik MVC — HiddenIndexerInputForModel в ClientTemplate

#asp.net-mvc-3 #telerik

#asp.net-mvc-3 #telerik

Вопрос:

MVC3 и использование сетки Telerik.

Я использую скрытый ввод индексатора Фила Хаака для модели, чтобы вернуть значения формы. Единственная проблема заключается в том, что при использовании Ajax в качестве databinder все используемые шаблоны должны иметь соответствующий ClientTemplate. Вот тут-то у меня и возникла проблема. Как мне вставить это и итератор в ClientTemplate, который ожидает строку?

Это то , что я безуспешно пытался сделать … когда я запускаю страницу, я получаю сообщение об ошибке, в котором говорится, что ‘Iter’ не определен.

 <% int Iter = 0; %>
<% Html.Telerik().Grid(Model.TransferStudents)
       .Name("TransferStudents")
        .Columns(columns =>
                {
                    columns.Bound(o => o.Name)
                        .Width(250);
                    columns.Template(o =>{%> 

                        <%: Html.HiddenFor(model => Model.TransferStudents[Iter].StudentId)%>
                        <%: Html.CheckBoxFor(model => Model.TransferStudents[Iter].Transfer)%>
                        <%})
                        .ClientTemplate("<input type='hidden' id='StudentId' value='<#= StudentId #>' /><input type='checkbox' name='Transfer' <#= Transfer?  "checked='checked'" :"" #> />")
                        .HtmlAttributes(new { @style = "text-align: center;" })
                        .HeaderHtmlAttributes(new { @style = "text-align: center;" })
                        .HeaderTemplate("Check All <input type='checkbox' id='chkAll' />")
                        .Width(105);
                    columns.Template(o =>{ %><% Iter = Iter   1; %><%})
                        .ClientTemplate("<# Iter = Iter   1; #>")
                        .Hidden();
                    columns.Template(o =>{ %><%: Html.HiddenIndexerInputForModel()%><% })
                        .ClientTemplate("<#= Html.HiddenIndexerInputForModel() #>")
                        .Hidden();
                })
        .DataBinding(dataBinding => dataBinding.Ajax().OperationMode(GridOperationMode.Server).Select("_Transfer", "Administration"))
        .Pageable(paging => paging.Style(pagerStyles).PageSize(2, new[] { 5, 10, 15, 25, 50, 200 }).Position(GridPagerPosition.Top).Total((int)ViewData["total"]))
        .Sortable()
        .NoRecordsTemplate("<p class='instructions'>No Records Available</p>")
        .Render();
        %>
 

Любые указатели будут оценены.

Ответ №1:

ClientTemplate ожидает строку, которая будет переведена в JavaScript и выполнена в браузере (на стороне клиента). Любой серверный код, такой как Html.HiddenIndexerInputForModel() не будет работать — нет эквивалента JavaScript. Вам нужно использовать обычный html, как вы это делали в другом столбце.

Комментарии:

1. Обнаружил, что это работает по столбцам. Template(o => { %><% Iter = Iter 1; %><%}) . ClientTemplate(«<# » Iter «; #>») .Hidden(); столбцы. Шаблон(o => { %><%: Html. HiddenIndexerInputForModel()%><% }) .ClientTemplate(«<#= » Html. HiddenIndexerInputForModel() «#>») .Скрытый();