asp.net-mvc - kendo - telerik asp net mvc grid popup
Agregar una columna Editar a una grilla telerik usando ASP.Net MVC 2 y Telerik MVC(2010 Q1) (5)
He tenido éxito con la creación de una grilla de Telerik para mostrar una lista de productos, sin embargo he tenido dificultades para agregar la columna para permitir que el usuario edite (ni siquiera estoy tratando de editar dentro de la grilla; simplemente quiero una enlace a una vista de edición)
Cuando agrego la columna personalizada, obtengo las siguientes líneas en la pantalla de mi error cuando depuro (línea 24 en rojo):
Line 22: columns.Add(o => o.ProductIsActive);
Line 23: columns.Template(o =>
Line 24: {
Line 25:
Line 26: %><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");
El mensaje de error de mi compilador es un mensaje de error del compilador: CS1525: término de expresión no válida '')''
Aquí está mi código de vista:
<%= Html.Telerik().Grid<NationalPetVax.Models.Product>()
.Ajax(ajax => ajax.Action("_Index", "Products"))
.DataKeys(dataKeys => dataKeys.Add(c => c.ProductID))
.DataBinding(dataBinding => dataBinding.Ajax().Update("Update", "Home"))
.Name("Grid")
.Columns(columns =>
{
columns.Add(o => o.ProductName).Width(81);
columns.Add(o => o.ProductPrice).Width(200);
columns.Add(o => o.ProductType.ProductTypeName);
columns.Add(o => o.Specy.SpeciesName);
columns.Add(o => o.ProductIsActive);
columns.Template(o =>
{
%><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");
})
.Sortable()
.Scrollable()
.Pageable();
%>
¿Alguien ha visto este problema? He seguido los tutoriales una y otra vez y estoy a punto de abandonar todas las cuadrículas de telerik, aunque realmente me gustan y quiero incluirlas en mi proyecto.
No sé sobre Telerik. Pero parece que el problema es sobre las etiquetas de cierre / apertura dentro de la expresión. Prueba esto :
columns.Template(o =>
{
Response.Write(Html.ActionLink("Edit", "Edit",
new { id = o.ProductID }));
}).Title("Edit");
El siguiente código resolverá su problema y hará que el código sea poco ordenado.
columns.Bound(o => o.ProductId).Format(
Html.ActionLink("Edit", "Edit", new {Id = "{0}"}).ToString());
También Bound es la nueva versión de Add in 2010 Q1
Si desea mantener sus "etiquetas Gator" en su código como
columns.Template(o =>
{
%><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");
})
Solo necesitas cambiar la forma en que llamas esto. En la parte superior estás haciendo un
<%=
Cambiar eso a
<%
Y solo llama
.Render()
al final de su declaración de la red. Eso evitará el error de "término de expresión no válida". Tu nuevo código debería verse como
<% Html.Telerik().Grid<NationalPetVax.Models.Product>()
.Ajax(ajax => ajax.Action("_Index", "Products"))
.DataKeys(dataKeys => dataKeys.Add(c => c.ProductID))
.DataBinding(dataBinding => dataBinding.Ajax().Update("Update", "Home"))
.Name("Grid")
.Columns(columns =>
{
columns.Add(o => o.ProductName).Width(81);
columns.Add(o => o.ProductPrice).Width(200);
columns.Add(o => o.ProductType.ProductTypeName);
columns.Add(o => o.Specy.SpeciesName);
columns.Add(o => o.ProductIsActive);
columns.Template(o =>
{
%><%=Html.ActionLink("Edit", "Edit", new { id = o.ProductID })%><% }).Title("Edit");
})
.Sortable()
.Scrollable()
.Pageable()
.Render();
%>
Quiero agregar alguna revisión para el código. prueba esto, es trabajo
columns.Add (c => c.CustomerID) .Format (Html.ActionLink ("Editar", "Home", nuevo {id = "{0}"}})) .Encoded (false) .Title ("Editar" );
Es una respuesta muy tardía, pero puede ser útil para otros. No puede usar solo columnas de plantilla de servidor en modo Ajax para la grilla Telerik. Si solo quieres agregar una columna extra a tu grilla que no esté ligada a nada (mientras mantienes el modo Ajax) prueba algo como esto
columns.Template(o=>{}).ClientTemplate(
Html.ActionLink("<Link text here>", "<action name>", "<controller name>",
new { id = "<#= ID #>" }, new { @class = "Edit" }).ToString()
).Title("Edit Column")
Esto se procesará correctamente y cualquier información que desee con el enlace será atendida también.