2012-02-29 3 views
0

좋아이 문제에 대해 도움이 필요합니다. 내 문제와 관련된 몇 가지 다른 답변을 검토했지만 해결하지는 못했습니다.Telerik MVC Grid ClientTemplate 문제

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

하하 .. 예, 이제 그 작은 따옴표를 사용하여 예제에서 가져 왔습니다. –