2014-09-12 5 views
0

Я столкнулся с некоторыми проблемами в последнее время и не смог найти решение. Я работаю над SportsStore из книги Адама Фримана Pro MVC 4. Посмотрите на это пожалуйста:ReturnUrl не имеет значения, ASP.Net MVC

У меня есть вид под названием Индекс:

@model WebUI.Models.CartIndexViewModel 
. 
. 
. 
<p align="center" class="actionButtons"> 
    <a href="@Model.ReturnUrl">Kontynuuj zakupy</a> 
</p> 

CartController:

{ 
    public class CartController : Controller 
    { 
     private IProductRepository repository; 

     public CartController(IProductRepository repo) 
     { 
      repository = repo; 
     } 

     public ViewResult Index(string returnUrl) 
     { 
      return View(new CartIndexViewModel 
      { 
       Cart = GetCart(), 
       ReturnUrl = returnUrl 
      }); 
     } 

     public RedirectToRouteResult AddToCart(int productID, string returnUrl) 
     { 
      Product product = repository.Products.FirstOrDefault(p => p.ProductID == productID); 
      if (product != null) 
      { 
       GetCart().AddItem(product, 1); 
      } 
      return RedirectToAction("Index", new { url = returnUrl }); 
     } 

     public RedirectToRouteResult RemoveFromCart(int productId, string returnUrl) 
     { 
      Product product = repository.Products.FirstOrDefault(p => p.ProductID == productId); 
      if (product != null) 
      { 
       GetCart().RemoveLine(product); 
      } 
      return RedirectToAction("Index", new { url = returnUrl }); 
     } 

     private Cart GetCart() 
     { 
      Cart cart = (Cart)Session["Cart"]; 
      if (cart == null) 
      { 
       cart = new Cart(); 
       Session["Cart"] = cart; 
      } 
      return cart; 
     } 

    } 
} 

ProductSummary Вид:

@model Domain.Entities.Product 

<div class="item"> 
    <h3>@Model.Name</h3> 
    @Model.Description 
    @using (Html.BeginForm("AddToCart", "Cart")) 
    { 
     @Html.HiddenFor(x => x.ProductID) 
     @Html.Hidden("returnUrl", Request.Url.PathAndQuery) 
     <input type ="submit" value="+ Dodaj do koszyka"/> 
    } 
    <h4>@Model.Price.ToString("c")</h4> 
</div> 

и CartIndexModelView:

public class CartIndexViewModel 
{ 
    public Cart Cart { get; set; } 
    public string ReturnUrl { get; set; } 
} 

И моя проблема на самом деле, что мои <a href="@Model.ReturnUrl">Kontynuuj zakupy</a> возвращает пустой <a>KontunuujZakupy</a> HTML, который я думаю, означает, что @Model.ReturnUrl не получает никакого значения вообще. Я не мог понять, почему, потому что я начинаю, не могли бы вы дать мне понять об этом? Благодарю. // редактировать «Kontynuuj Zákupy» означает Продолжить покупки :)

+0

Я думаю, 'вернуть RedirectToAction ("Index", новый {URL = ReturnUrl});' должен быть ' return RedirectToAction («Index», new {returnUrl = returnUrl}); 'в вашем addtocart и removefromcart ar – Carl

+0

Спасибо большое :) – Sheil

ответ

1

Ваш индекс действий выглядит следующим образом:

public ViewResult Index(string returnUrl) { ... } 

Он принимает параметр returnUrl и вставить, что в модели, которую вы возвращаете. При просмотре вашего сайта без указания возврата URL, он будет пустым, например:

http://localhost:1234 
http://localhost:1234/Home/Index 

Попробуйте передать параметр как это:

http://localhost:1234?returnUrl=xxxx 
http://localhost:1234/Home/Index?returnUrl=xxxx 

Обратите внимание, что имя параметра совпадает с действием индекса , Поэтому в ваших действияхи RemoveFromCart вам необходимо изменить имя параметра от url до returnUrl.

return RedirectToAction("Index", new { returnUrl = returnUrl }); 
+0

Решил все, спасибо! :) – Sheil

0

вы можете просто изменить последнюю строку вашего AddToCart действия на:

return RedirectToAction("Index", new { returnUrl = returnUrl }); 
Смежные вопросы