문제

데이터 그리드를 렌더링, 정렬 및 필터링하기 위해 MVC Contrib 그리드를 사용하고 있지만 이제 MVC3 및 Razor용으로 업그레이드되었으므로 문제가 있습니다.내 열 컬렉션의 사용자 지정 메서드는 aspx 페이지에서 작동하지 않으며 열의 작업 메서드는 이제 더 이상 사용되지 않습니다.

MVC 2에서 그리드 작업 메서드를 사용하여 다음과 같이 열을 렌더링합니다.

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            column.For("View User").Named("Tools").Action(x => { %>
                 <td>
                   <%= Html.ActionLink("View", "View", new { id = p.Id })%>
                   <%= Html.ActionLink("Edit ", "Edit", new { id = p.Id })%>
                   //Snip as there are too many tools :-)
                   //.....
                   <%= Html.ActionLink("Delete", "Delete", new { id = p.Id })%>
                </td>
            <% });
 ...

이제 최신 버전에는 사용되지 않는 Action 메서드를 대체하는 Custom 메서드가 있습니다.어떻게 하면 되는지 살펴봤는데 여기에서, 기본적으로 지금은 작동하지만 aspx 보기(url 등)에서 모든 도우미를 잃어버렸고 이제 아래와 같이 내 모델의 다른 방법으로 내 콘텐츠를 렌더링해야 합니다.

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            //the new custom column 
            column.Custom(Model.ToolsRenderer);
            <% });
 ...

아래의 ToolsRenderer라는 그리드 모델 메서드는 HTML 문자열을 렌더링하는 데 사용됩니다.

 public UserManagementViewModel : BaseModel {
   //..snip
   //
     public object ToolsRenderer(Client client)
     {
        List<string> links = new List<string>();

        var editLink = new TagBuilder("a");
        // here is my biggest problem, before  Html.ActionLink used to make
        // sure that I don't have any missing links or help me if i need to 
        // refactor an action / controller name :-(
        editLink.Attributes["href"] = GetEditUserLink(client,   HttpContext.Current.Request.Url.AbsoluteUri);
        editLink.SetInnerText("edit");
        links.Add(editLink.ToString());
        ...
        ...lots of links to be generated here
        ...
        return MvcHtmlString.Create(string.join(" |", links))
        }
   //..snip
}

현재로서는 작동하지만 내 aspx 페이지를 아래와 같은 면도기 뷰처럼 작동하게 하는 방법이 있습니까?

@Html.Grid(Model).Columns(column =>
{
  column.For(x => x.Id).
  column.For(x => x.Name);
  column.Custom(@<td><a href='@Html.Actionlink("edit","user",new {id})' alt="@item.email"/><a></td>)

})

나는 다음과 같이 말하고 싶다:

...     
column.Custom(%><td><a href='<%=Html.Actionlink("edit","user",new {id})%>' alt="<%=item.email%>"/><a></td><%)
...
도움이 되었습니까?

해결책

마지막으로 도움을 받고 파기 및 사용자 정의 열을 사용하는 대신 열을 사용하고 html.partial을 눌러 눌러 낼 수 있습니다.아래 코드와 같은 것.

<% Html.Grid(Model).Columns(column => {
        column.For(x => x.Id);
        column.For(x => x.Name);
        column.For(x => x.Email);
        column.For(x => x.DateOfBirth);

        // could use RenderPartial() to
        column.For(x =>Html.Partial("UserActionColumn", x));

        <% });
.

다른 팁

면도기 케이스 @Helper는 사용자 정의 필드에 사용할 수 있습니다.

예 :

column.For(r => Status(r.Status)).Encode(false).Named("Status");

@helper Status(string value)
{
    if (value == RequestStatus.Pending)
    {
        <span class="label label-info">@value</span>
    }
    ...
}
.

다른 답변을 보완하여 해당 사용자 정의 열을 기준으로 정렬하려면 SortColumnName.이렇게 하지 않으면 그리드는 다음을 사용합니다. Named 인수를 열 이름으로 사용하지만 Named 열에 제목을 지정하는 데에도 사용됩니다.내 열 이름이 제목과 일치하지 않아서 머리가 아팠습니다.

column.For(c => "custom text").Named("Column Name").SortColumnName("ColumnName");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top