2012-02-20 62 views
9

我有一個方法:返回當前URL在asp.net mvc的

public ActionResult AddProductToCart(int productId) 
    { 
     var product = _productService.GetProductById(productId); 
     if (product == null) 
      return RedirectToAction("Index", "Home"); 

     int productVariantId = 0; 
     if (_shoppingCartService.DirectAddToCartAllowed(productId, out productVariantId)) 
     { 
      var productVariant = _productService.GetProductVariantById(productVariantId); 
      var addToCartWarnings = _shoppingCartService.AddToCart(_workContext.CurrentCustomer, 
       productVariant, ShoppingCartType.ShoppingCart, 
       string.Empty, decimal.Zero, 1, true); 
      if (addToCartWarnings.Count == 0) 
       //return RedirectToRoute("ShoppingCart"); 
      else 
       return RedirectToRoute("Product", new { productId = product.Id, SeName = product.GetSeName() }); 
     } 
     else 
      return RedirectToRoute("Product", new { productId = product.Id, SeName = product.GetSeName() }); 
    } 

你看這是註釋掉行:我希望這不會引發來自同一頁面上的任何重定向,但只是停留請求的地址是

如果我把return View()它不是很好,因爲它會爲瀏覽搜索這個名字,而這個方法是一個簡單的動作添加到購物車..

能否請您給我如何重定向到當前的解決方案網址或留在同一頁面?

回答

5

假設你的意思是返回到你訪問該控制器之前:

return Redirect(Request.UrlReferrer.ToString()); 

請記住,如果您發佈獲取對[上一頁]頁,你會是在因爲虧損你不是在模仿同樣的要求。

16

你可以傳遞一個附加returnUrl查詢字符串參數此方法指示URL找回一旦產品被添加到購物車:

public ActionResult AddProductToCart(int productId, string returnUrl) 

,這樣就可以回重定向到無論你是:

if (addToCartWarnings.Count == 0) 
{ 
    // TODO: the usual checks that returnUrl belongs to your domain 
    // to avoid hackers spoofing your users with fake domains 
    if (!Url.IsLocalUrl(returnUrl)) 
    { 
     // oops, someone tried to pwn your site => take respective actions 
    } 
    return Redirect(returnUrl); 
} 

並生成連結此動作時:

@Html.ActionLink(
    "Add product 254 to the cart", 
    "AddProductToCart", 
    new { productId = 254, returnUrl = Request.RawUrl } 
) 

,或者如果您張貼到這一行動(其中的方式,你可能應該是因爲它是在服務器上修改狀態 - 它增加了一個產品,一個購物車或東西):

@using (Html.BeginForm("AddProductToCart", "Products")) 
{ 
    @Html.Hidden("returnurl", Request.RawUrl) 
    @Html.HiddenFor(x => x.ProductId) 
    <button type="submit">Add product to cart</button> 
} 

另一種可能性是使用AJAX來調用這個方法。通過這種方式,用戶可以在任何地方停留在該頁面上,然後再調用它。

+0

作爲抓住推薦人的「簡單」,我認爲這是一個更好的解決方案。預先做更多的工作,但我相信它會給你一個更堅實的結果。另一方面,您可以使用'returnUrl'並默認使用'Request.Referrer'。一個更加防彈的方法是創建一個HtmlExtender(也許''Html.ActionLinkWithReturnUrl(...)'?) – 2012-02-20 20:24:40

+0

@BradChristie,我個人不使用'Referrer'。不知道爲什麼。只是不喜歡它。 – 2012-02-20 20:26:31

+0

任何你在無國籍環境中依賴事物的東西都會給我帶來意志。所以我和你在一起。 – 2012-02-20 20:27:32