В этот метод можно передать дополнительный параметр строки запроса 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 }
)
или если вы выполняете POST для этого действия (что, кстати, вероятно, так и должно быть, потому что оно изменяет состояние на сервере - оно добавляет товар в корзину или что-то в этом роде):
@using (Html.BeginForm("AddProductToCart", "Products"))
{
@Html.Hidden("returnurl", Request.RawUrl)
@Html.HiddenFor(x => x.ProductId)
<button type="submit">Add product to cart</button>
}
Другая возможность - использовать AJAX для вызова этого метода. Таким образом, пользователь останется на странице, где бы он ни находился, прежде чем ее вызвать.