2012-02-29 13 views
0

申し訳ありません。私は私の問題に関係するいくつかの他の答えを見直しましたが、解決しませんでした。Telerik MVCグリッドクライアントテンプレート問題

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() 

そして、私はActionImageを構築するためにHtmlHelperExtensionを使用しています:

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を取得するには誰かが正しい方向に向いていますか?

ありがとうございます!

+0

私はパーティーに遅刻を知っているが、現在の設定を編集可能なグリッドをしようとしています。クライアントのHtml.ActionImageに関しては、RazorEngineを使ってRazor構文を使用してクライアント側の文字列を生成する方法を試しています。 – B2K

答えて

0

これは私が思いついた解決策です。クライアント側テンプレートで@ 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() 

+0

クライアントテンプレートの文字列に「\」の代わりに「\」を使用すると、はるかに読みやすくなります –

+0

Hah ..ええ、私は例から引用しました。 –

関連する問題