Telerik MVC Grid ClientTemplate Issue - PullRequest
       6

Telerik MVC Grid ClientTemplate Issue

0 голосов
/ 29 февраля 2012

Хорошо, мне нужна помощь с этим. Я рассмотрел несколько других ответов, относящихся к моей проблеме, но не решил ее.

Я пытаюсь добавить изображение действия в строку сетки в шаблоне клиента Telerik MVC.

Проблема в том, что я не могу получить идентификатор из столбца, для которого предназначен шаблон клиента.

Вот моя сетка:

@(Html.Telerik().Grid<xxx.Business.Entities.EntityName>()
    .Name("StudentSearchResults")
    .Columns(columns =>
    {
        columns.Bound(o => o.SchoolStudentID);
        columns.Bound(o => o.FirstName);
        columns.Bound(o => o.LastName);
        columns.Bound(o => o.StudentID).ClientTemplate(
            @Html.ActionImage("SubmitDegree", new { studentID = "<#= StudentID #=>" }, "~/Content/Images/Icons/16/bullet_go.png", "Submit Degree").ToString()
            ).Title("")
            .Width(20);
    })
    .DataBinding(databinding => databinding
    .Ajax()
    .OperationMode(GridOperationMode.Client)
    .Select("AjaxBindAction", "ControllerName"))
    .Pageable()
    .Sortable()

)

И я использую HtmlHelperExtension для создания ActionImage:

public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt)
    {
        var url = new UrlHelper(html.ViewContext.RequestContext);

        // build the <img> tag
        var imgBuilder = new TagBuilder("img");
        imgBuilder.MergeAttribute("src", url.Content(imagePath));
        imgBuilder.MergeAttribute("alt", alt);
        string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);

        // build the <a> tag
        var anchorBuilder = new TagBuilder("a");
        anchorBuilder.MergeAttribute("href", url.Action(action, routeValues));
        anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
        string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);

        return MvcHtmlString.Create(anchorHtml);
    }

Я также попытался установить шаблон на стороне сервера, а затем на стороне клиента .. как было отправлено здесь

@(Html.Telerik().Grid<AIPortal.Business.Entities.EntityName>()
    .Name("StudentSearchResults")
    .Columns(columns =>
    {
        columns.Bound(o => o.SchoolStudentID);
        columns.Bound(o => o.FirstName);
        columns.Bound(o => o.LastName);
        columns.Bound(o => o.StudentID).Template(t => {
                    @Html.ActionImage("SubmitDegree", new { studentID = t.StudentID }, "~/Content/Images/Icons/16/bullet_go.png", "Submit Degree");
                     })
                     .ClientTemplate(
                     @Html.ActionImage("SubmitDegree", new { studentID = "<#= EntityName.StudentID #>" }, "~/Content/Images/Icons/16/bullet_go.png", "Submit Degree").ToString())
            .Title("")
            .Width(20);
    })
    .DataBinding(databinding => databinding
    .Ajax()
    .OperationMode(GridOperationMode.Client)
    .Select("AjaxBindAction", "DegreeCompletion"))
    .Pageable()
    .Sortable()

)

думаете, что это может быть проблема с @ Html.ActionImage, работающим на сервере в шаблоне клиента?

Я могу жестко закодировать StudentID, и все работает нормально. Единственная проблема - при попытке получить доступ к StudentID, для которого предназначен шаблон клиента.

Может ли кто-нибудь указать мне правильное направление, чтобы вставить этот идентификатор в шаблон моего клиента?

Спасибо !!

1 Ответ

0 голосов
/ 02 марта 2012

Это решение, которое я придумал. Не удалось использовать метод @ Html.ActionImage в шаблоне на стороне клиента.

@(Html.Telerik().Grid<xxx.Business.Entities.EntityName>()
    .Name("StudentSearchResults")
    .Columns(columns =>
    {
        columns.Bound(o => o.SchoolStudentID);
        columns.Bound(o => o.FirstName);
        columns.Bound(o => o.LastName);
        columns.Bound(o => o.StudentID).ClientTemplate(
                     "<a href=\"/DegreeCompletion/SubmitDegree?studentID=<#= StudentID #>\"><img alt=\"Submit Degree\" src=\"/Content/Images/Icons/16/bullet_go.png\"></a>")
            .Title("")
            .Width(20);
    })
    .DataBinding(databinding => databinding
    .Ajax()
    .OperationMode(GridOperationMode.Client)
    .Select("AjaxBindMethod", "DegreeCompletion"))
    .Pageable()
    .Sortable()

)

...