ASP.NET MVC: das Umleiten von einer Ansicht zu einer anderen
Hallo, ich bin mit dem folgenden code, um die Umleitung von einem kendo-grid zu einer anderen Seite (Ansicht):
@(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...
}
Den Erhalt Methode auf die StockReceipt Controller:
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);
}
Und hier ist meine route Konfiguration:
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 }
);
}
Das Problem:
.. ist, dass Sie die oben genannten Javascript-code ist nicht umleiten, es ist, dass Sie mich zu dieser URL: http://localhost:50439/StockReceipt/6
- Und reporting-die 'Yellow Screen of Death" mit diesem Fehler:
Den Parameter-dictionary enthält einen null-Eintrag für den parameter 'stockReceiptId' nicht-nullable-Typ 'System.Int32' Methode 'System.Web.Mvc.ActionResult Update(Int32)' in 'WorcesterMarble.Controller.StockReceiptController'. Einen optionalen parameter müssen Sie einen Verweis geben, eine nullable-Typ, oder erklärt werden als optionale parameter.
Parameter name: Parameter
Wo 6 ist die ID.
Wenn ich entfernen Sie das id-element geworden:
window.location.href = "@Url.Action("Update","StockReceipt")"
Es funktioniert, aber ich brauche die ID, weil ich will, um das laden der ausgewählten "ViewModel" in die zielansicht.
Frage ich mich, was mache ich falsch?!
Habe ich ausprobiert, aber ohne Erfolg.:
window.location.href = @Url.RouteUrl("Default", new { @Controller = "StockReceipt", @Action = "Update"}) + '//' + stockReceiptId;
InformationsquelleAutor t_plusplus | 2014-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
So lösen, wie dieses:
Mehr details hier
weil ich bin mit KendoUI grid. Start der Navigation aus der Javascript-click-Ereignis auf eine benutzerdefinierte Schaltfläche in der KendoGrid. Wie Sie oben sehen, klicken Sie auf die Schaltfläche ich bin der Erfassung der ID des ausgewählten Datensatzes und dann übergeben, die ID über die MVC url-helper. Bitte lassen Sie mich wissen, wenn es irgendeine bessere Möglichkeit, dies zu tun. Vielen Dank.
InformationsquelleAutor t_plusplus
Ich glaube, alle, die Sie suchen, ist dies:
http://msdn.microsoft.com/en-us/library/dd505151%28v=vs.118%29.aspx
In Ihrem Standard-route-variable-parameter "id", also, wenn Sie nicht geben Sie die variable name wird wieder id. defaults: new { controller = "Home", Aktion = "Index", id = UrlParameter.Optional } Das funktioniert auch, "@Url.Aktion("Update","StockReceipt", new { stockReceiptId = 6 })"
InformationsquelleAutor Mister Epic