2010-11-29 15 views
9

El siguiente código insertará un actionlink en una de las columnas de la red web.¿Cómo hacer un MVC 3 Webgrid con columna de casilla de verificación?

@{ 
    View.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 

    var usersGrid = new WebGrid(source: Model, 
     rowsPerPage: 40); 
} 
@usersGrid.GetHtml(
     tableStyle: "grid", 
     headerStyle: "head", 
     alternatingRowStyle: "alt", 
       columns: usersGrid.Columns(
        usersGrid.Column(format: (item) => 
         Html.ActionLink("Edit", "Edit", new { id = item.Id})), 
        usersGrid.Column("Surname") 
     ) 
    ) 

Pero si yo intercambiamos esa línea para esto:

   usersGrid.Column(format: (item) => Html.CheckBox(item.Id)), 

me sale este error:

Error 4 The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' has some invalid arguments.

yo no entiendo muy bien la diferencia entre los dos .. ¿por qué un trabajo y el otro error?

El objetivo final es poder marcar una serie de casillas de verificación y luego enviarlas para imprimir su información.

+0

Ver: http: // stackoverflow.com/questions/4195440/mvc-3-texbox-in-webgrid-razor/4564506 # 4564506 – Serguzest

+0

[Esto te ayudará] (http://weblogs.asp.net/imranbaloch/archive/2011/09/13/webgrid -helper-with-check-all-checkboxes.aspx) – user960567

Respuesta

20

Esto es lo que funcionó para mí al final.

usersGrid.Column(header: "Print?", format: @<text><input name="Prints" 
     type="checkbox" value="@item.ID" /></text>), 

tengo para dar gracias a Nick Harris, la respuesta se encuentra en los comentarios de su blog aquí: http://www.nickharris.net/2010/10/a-first-look-at-the-asp-net-mvc-3-webgrid/

+4

Buen consejo, si tiene un valor booleano para verificarlo también puede agregar una condición adicional usersGrid.Column (encabezado: "Encabezado", formato: @), –

+0

¡Funciona para mí, gracias! – Roman

+0

Yaa Está bien, funciona bien ... + 1 para ti – Garry

-3

probar este

new HtmlString(usersGrid.Column(format: (item) => Html.CheckBox(item.Id)).ToString()), 

en lugar de

usersGrid.Column(format: (item) => Html.CheckBox(item.Id)), 
+0

No me alegro, el mismo error desafortunadamente. – 4imble

0

se produce este error porque la llamada casilla de verificación no está devolviendo el mismo tipo de datos que ActionLink está regresando.

Esto es lo que debes hacer. Haga una llamada de cuadro de mensaje en la llamada de enlace de acción y la casilla de verificación de llamada con los mismos argumentos, rastree cada uno dentro de la llamada de función Nombre de tipo() y muestre los resultados en un cuadro de mensaje para que vea. Además, haga un .ToString en ambos también, ahora, observe los resultados, debería decirle si hay una discrepancia entre los tipos de datos devueltos, si puede, publique los resultados, y le puedo decir más. Házmelo saber.

+0

Gracias, tendré la oportunidad de probar esto más tarde hoy. – 4imble

+0

@kohan bien, déjame saber cómo te va cuando lo haces, estoy interesado ahora mismo lol, vítores compañero –

+0

No creo que el problema fue con la casilla de verificación, pero el elemento dinámico (que es lo que estaba haciendo chenriks, creo). Pero de todos modos, lo he ordenado ahora. ¡Muchas gracias! – 4imble

4

Tienes que tener cuidado con el uso de métodos de extensión (Html. *) Con dinámica (elemento) ... no funciona bien en csharp. Cuando haces la nueva {} proyección o llamas a ToString, ya no es dinámico. Alternativamente, puede lanzar: (objeto) item.Id.

+0

Gracias, tendré la oportunidad de probar esto más tarde hoy. – 4imble

+0

¿Esto significa que en vb se maneja mejor? solo preguntando a hehe :) –

+0

upvoted ya ..... –

2

usersGrid.Column(format: (item) => Html.CheckBox((string)item.Id)),

esto debería funcionar

4

esto está funcionando para mí:

grid.Column("SiparisNo", "Seç", format: (item) => Html.CheckBox(String.Format("Secili_{0}", (int)item.SiparisNo), false, new { @style = "width:60px;" })) 
1

The e asiest manera:

usersGrid.Column(format: (item) => Html.CheckBox("Id")) 
-2

**

@{ 
    var grid = new WebGrid(source: Model.ToList(), canPage: true, canSort: true); 
    grid.Pager (WebGridPagerModes.All); 
} 

**

<div id="g1"> 
    @grid.GetHtml(

    columns:grid.Columns 
    (grid.Column(columnName:"paymentno",header:"PAYMENT NO"), 

    grid.Column(columnName:"mname",header:"NAME"), 

    grid.Column(columnName:"pamt",header:"AMOUNT"), 

    grid.Column(header: "Header", format: @<text><input name="HasFormgivaren" type="checkbox" 
     value="@item.checkresult" @(item.checkresult == "True" ? "Checked" : null) /></text>) 
    ) 
    ) 
</div> 
+0

También debes agregar alguna explicación – Massimo

0

Después de una búsqueda vigorosa He encontrado una solución óptima, puede utilizar esta lógica en su lugar si usted está encontrando difícil usar ayudantes HTML

grid.Column(header: "", format: @<text><input name="chkBox" type="checkbox" value="@item.Id" @(item.Id == false ? null : "checked") /></text>) 
Cuestiones relacionadas