Telerik Grille pour ASP.NET Ajax MVC2 La liaison ne fonctionne pas / routes à de mauvaises actions
-
10-10-2019 - |
Question
Les charges Ceignez b / c des liaisons de serveur. Toutes les autres actions sont soit l'affichage à la mauvaise voie, ou à l'action par défaut: Insérer les messages à / l'action EditOrder Modifier les messages à cette adresse: http: // localhost: 20588 / Commandes / EditOrder / sdsddd OrderID = 2 & CustomerID = 1 & ItemsInOrderGrid mode = modifier qui n'a pas de sens (sdsddd est le ItemID) non des points de rupture à l'intérieur des sections de AJAX dans le contrôleur sont atteints. Toute idée de ce que je fais mal?
Merci, Dani
ici est le code de la vue:
<%=
Html.Telerik().Grid(Model.ItemsInOrderList)
.Name("ItemsInOrderGrid")
.DataKeys(dataKeys =>
{
dataKeys.Add(e => e.OrderID);
dataKeys.Add(e => e.ItemID);
})
.ToolBar(commands => commands.Insert())
.DataBinding(dataBinding =>
dataBinding.Ajax() //Ajax binding
.Select("ItemsGridAjax", "Orders", new {OrderID = Model.order.OrderID})
.Insert("InsertItemsGridAjax", "Orders", new {OrderID = Model.order.OrderID})
.Update("UpdateItemsGridAjax", "Orders")
.Delete("DeleteItemsGridAjax", "Orders"))
//.BindTo(Model.ItemsInOrderList)
.Columns(c =>
{
c.Bound(o => o.ItemID);
c.Bound(o => o.OrderID).Column.Visible = false;
c.Bound(o => o.ItemDescription);
c.Bound(o => o.NumOfItems);
c.Bound(o => o.CostOfItem);
c.Bound(o => o.TotalCost);
c.Bound(o => o.SupplyDate);
c.Command(commands =>
{
commands.Edit();
commands.Delete();
}).Width(200);
})
%>
Voici le code dans le contrôleur:
[GridAction]
public ActionResult ItemsGridAjax(int OrderID)
{
return View(ordersRepository.GetOrderItemsTK(OrderID));
}
[HttpPost]
[GridAction]
public ActionResult InsertItemdGridAjax(int OrderID)
{
//Create a new instance of the EditableCustomer class.
ItemsInOrder newItem = ItemsInOrder.CreateItemsInOrder(OrderID, "");
newItem.OrderID = OrderID;
//Perform model binding (fill the customer properties and validate it).
if (TryUpdateModel(newItem))
{
//The model is valid - insert the customer.
bool res = ordersRepository.InsertItemToOrder(OrderID, newItem);
}
//Rebind the grid
return View(ordersRepository.GetOrderItemsTK(OrderID));
}
[HttpPost]
[GridAction]
public ActionResult UpdateItemsGridAjax(int OrderID, string ItemID)
{
//Find a customer whose CustomerID is equal to the id action parameter
ItemsInOrder item = ordersRepository.FindItemByID(OrderID,ItemID);
if (item != null)
{
//Perform model binding (fill the customer properties and validate it).
if (TryUpdateModel(item))
{
//The model is valid - update the customer and redisplay the grid.
ordersRepository.UpdateItem(item);
}
}
// TODO: Add try-catch with error reporting.
//Rebind the grid
return View(ordersRepository.GetOrderItemsTK(OrderID));
}
[HttpPost]
[GridAction]
public ActionResult DeleteItemsGridAjax(int OrderID, string ItemID)
{
//Find the customer with the specified id
ItemsInOrder item = ordersRepository.FindItemByID(OrderID, ItemID);
if (item != null)
{
//Delete the customer
ordersRepository.DeleteItem(item);
}
//Rebind the grid
return View(ordersRepository.GetOrderItemsTK(OrderID));
}
La solution
Je ne sais pas si vous avez besoin de l'attribut [HttpPost]
(je pense juste [GridAction]
sera suffisant) sur les actions Ajax, peut-être essayer de retirer ceux-ci et voir si cela résout le problème.
Si cela ne fonctionne pas, essayez de retourner un GridModel
dans vos actions comme ceci:
[GridAction]
public ActionResult InsertItemdGridAjax(int OrderID)
{
//Omitted Code
return View(new GridModel(ordersRepository.GetOrderItemsTK(OrderID)));
}
Vous pouvez également utiliser une syntaxe similaire à ce qui suit (comme je pense que le GridModel
aime avoir un total
):
[GridAction]
public ActionResult InsertItemdGridAjax(int OrderID)
{
//Omitted Code
//Get List of Order Items
List<OrderItem> list = ordersRepository.GetOrderItemsTK(OrderID));
return View(new GridModel
{
Data = list,
Total = list.Count
});
}
Autres conseils
A avait même problème, mais dans MVC 3
La solution était d'ajouter des scripts appropriés * dans le projet, voir cette
et ajouter @(Html.Telerik().ScriptRegistrar().jQuery(false))
en fin du fichier _Layout.cshtml
Un routage puis va bien!