您好我使用以下代码从kendo网格重定向到另一个页面(查看):
@(Html.Kendo().Grid() .Name("Grid") .ToolBar(toolbar => toolbar.Template("Create Stock Receipt")) .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("#=GetText()#"); 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... }
StockReceipt控制器上的接收方法是:
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); }
这是我的路线配置:
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 } ); }
问题:
..是上面的Javascript代码没有重定向,它带我到这个URL:http://localhost:50439/StockReceipt/6
并使用此错误报告"黄色死亡屏幕":
参数字典包含'WorcesterMarble.Controllers.StockReceiptController'中方法'System.Web.Mvc.ActionResult Update(Int32)'的非可空类型'System.Int32'的参数'stockReceiptId'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数.参数名称:参数
其中6是ID.
如果我删除id元素变为这样:
window.location.href = "@Url.Action("Update","StockReceipt")"
它工作,但我需要ID,因为我想在目标视图中加载选定的'ViewModel'.
我不知道我做错了什么?!
我试过用这个,但无济于事:
window.location.href = @Url.RouteUrl("Default", new { @Controller = "StockReceipt", @Action = "Update"}) + '//' + stockReceiptId;
t_plusplus.. 7
解决方式如下:
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=" + stockReceiptId; }
更多细节在这里