ASP.NET MVC: la Redirection à partir d'une vue à l'autre
Salut, je suis en utilisant le code suivant pour rediriger à partir d'un kendo de la grille à une autre page (Vue):
@(Html.Kendo().Grid<WM.ViewModels.StockReceiptsGridViewModel>()
.Name("Grid")
.ToolBar(toolbar => toolbar.Template("<a class='k-button k-button-icontext' onclick='addMaterialPopup()' href='#'></span>Create Stock Receipt</a>"))
.Columns(columns =>
{
columns.Bound(p => p.StockReceiptID);
columns.Bound(p => p.SupplierName);
columns.Bound(p => p.Product);
columns.Bound(p => p.Dimensions);
columns.Bound(p => p.Quantity);
columns.Bound(p => p.QuantityReserved);
columns.Bound(p => p.PurchaseNumber);
columns.Bound(p => p.Cost);
columns.Bound(p => p.PhotosLink).Title("").ClientTemplate("<a href='/Photos/index?StockReceiptID=#=StockReceiptID#'>#=GetText()#</a>");
columns.Command(command => command.Custom("Edit").Click("editreceipt"));
})
.DataSource(dataSource => dataSource
.Ajax()
.Batch(false)
.Model(model => model.Id(p => p.StockReceiptID))
.Read(read => read.Action("Read", "StockReceiptsGrid").Data("ExtraData"))
)
)
Javascript:
function editreceipt(e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
var stockReceiptId = dataItem.StockReceiptID;
window.location.href = "@Url.Action("Update","StockReceipt")"+"/"+stockReceiptId; //Problem code...
}
La méthode de réception de la StockReceipt Contrôleur est:
public ActionResult Update(int stockReceiptId)
{
var stockReceipt = _stockReceiptRepository.GetAllStockReceipts().ToList().Where(r => r.StockReceiptID == stockReceiptId);
var model = new StockReceiptViewModel();
model.Notes = stockReceipt.First().Notes;
return View("Index", model);
}
Et voici mon itinéraire de configuration:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Le Problème:
.. c'est que le code Javascript ci-dessus n'est pas de redirection, c'est la prise de moi à cette adresse: http://localhost:50439/StockReceipt/6
Et la présentation de la "Yellow Écran de la Mort" avec cette erreur:
Le dictionnaire de paramètres contient une valeur null pour le paramètre 'stockReceiptId" de type non nullable "Système".Int32 "pour la méthode" du Système.Web.Mvc.ActionResult mise à Jour(Int32)' dans 'WorcesterMarble.Les contrôleurs.StockReceiptController'. Un paramètre facultatif doit être un type de référence, un type nullable, ou être déclaré comme un paramètre facultatif.
Nom du paramètre: paramètres
Où 6 est l'ID.
Si je supprime l'id de l'élément à devenir comme cela:
window.location.href = "@Url.Action("Update","StockReceipt")"
Il fonctionne, mais j'ai besoin de l'ID parce que je veux charger la sélection de "ViewModel" dans la vue de destination.
Je me demande ce que je fais mal?!
J'ai essayé d'utiliser cela, mais en vain.:
window.location.href = @Url.RouteUrl("Default", new { @Controller = "StockReceipt", @Action = "Update"}) + '//' + stockReceiptId;
OriginalL'auteur t_plusplus | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Résolu comme ceci:
Plus de détails ici
parce que je suis en utilisant KendoUI de la grille. La Navigation commence à partir du Javascript événement click sur un bouton personnalisé dans le KendoGrid. Comme vous le voyez ci-dessus, cliquez sur le bouton je suis de la capture de l'ID de l'enregistrement sélectionné, puis la remise d'identification à la MVC url helper. S'il vous plaît laissez-moi savoir si il ya une meilleure façon de le faire. Merci beaucoup.
OriginalL'auteur t_plusplus
Je crois que tout ce que vous cherchez est: est-ce
http://msdn.microsoft.com/en-us/library/dd505151%28v=vs.118%29.aspx
Dans votre itinéraire par défaut de votre paramètre de variable est appelée id, donc si vous ne spécifiez pas le nom de la variable, il en sera de retour à l'id. par défaut: la nouvelle { controller = "la Maison", action = "Index", id = UrlParameter.Facultatif } Ce sera également le travail "@Url.Action("mise à Jour","StockReceipt", new { stockReceiptId = 6 })"
OriginalL'auteur Mister Epic