Pregunta

Estoy usando el MVC Contrib Cuadrícula para representar, ordenar y filtrar los datos de mi grid, pero estoy teniendo problemas ahora que se ha actualizado para MVC3 y la maquinilla de Afeitar.El método Personalizado en mi colección de columnas no funciona para las páginas aspx , y las columnas método de Acción es ahora obsoleto.

Yo uso cuadrículas método de acción para dar mis columnas como esta en 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>
            <% });
 ...

Ahora, con la última versión que hay es un método Personalizado que sustituye al obsoleto método de Acción.Miré cómo se puede hacer aquí, que , básicamente, funciona para mí ahora, pero voy a perder todos mis ayudantes en el aspx view (url, etc), y ahora necesito el render de mi contenido en otro método en mi modelo como el siguiente:

 ...
 <% 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);
            <% });
 ...

El modelo grid método a continuación ToolsRenderer se utiliza para representar mi cadena 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
}

Esto funciona por ahora, pero hay una manera de conseguir mi página aspx de trabajo como la maquinilla de afeitar puntos de vista, como el de abajo?

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

})

Quiero decir algo como:

...     
column.Custom(%><td><a href='<%=Html.Actionlink("edit","user",new {id})%>' alt="<%=item.email%>"/><a></td><%)
...
¿Fue útil?

Solución

Finalmente, logró encontrar un trabajo con alguna ayuda y cavar, y en lugar de usar la columna personalizada, use la columna. Para obtener el HTML.Partial.Algo así como el código a continuación.

<% 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));

        <% });

Otros consejos

para Razor Case @Helper se puede utilizar para campos personalizados.

Por ejemplo:

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>
    }
    ...
}

Complementando las otras respuestas, si desea ordenar por la columna personalizada, no te olvides de añadir un SortColumnName.Si usted no hace esto, la red se utiliza el Named argumento como el nombre de la columna, pero Named también se utiliza para dar un título a la columna.Tengo un dolor de cabeza porque mi nombre de columna no coincide con el título:

column.For(c => "custom text").Named("Column Name").SortColumnName("ColumnName");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top