【问题标题】:Telerik MVC Grid ClientTemplate IssueTelerik MVC Grid ClientTemplate 问题
【发布时间】:2012-02-29 00:34:49
【问题描述】:

好的,我需要一些帮助。我查看了一些与我的问题相关的其他答案,但没有解决。

我正在尝试将动作图像添加到 Telerik MVC 客户端模板中的网格行。

我遇到的问题是我无法从客户端模板所在的列中获取 ID。

这是我的网格:

@(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);
    }

我还尝试设置服务器端模板,然后设置客户端模板.. 发布 here

@(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 时。

有人可以指出正确的方向,让我将此 ID 放入我的客户模板中吗?

谢谢!!

【问题讨论】:

  • 我知道我迟到了,但我目前正在尝试设置一个可编辑的网格。关于客户端中的 Html.ActionImage,我正在尝试使用 RazorEngine 使用 Razor 语法生成客户端字符串。

标签: asp.net-mvc-3 telerik-grid telerik-mvc


【解决方案1】:

这是我想出的解决方案。无法在客户端模板中使用@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()

)

【讨论】:

  • 您可以在客户端模板字符串中使用 ' 而不是 \" - 可读性会更高。
  • 哈.. 是的,我从一个例子中提取了它。现在使用单引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多