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