Действие не срабатывает - PullRequest
0 голосов
/ 23 февраля 2012

Вот моя подпись контроллера:

public class CartController : Controller
{

    public ActionResult Index()
    {

        CartViewModel cartViewModel = _cartRepository.GetCart(SessionVariables.CartId);
        return View(cartViewModel);
    }

    public ActionResult List()
    {
        return View();
    }

    [Authorize]
    public ActionResult AddToCart(int productId, int quantity = 1)
    {

        return RedirectToAction("Index");
    }

    [HttpPost]
    [ActionName("AddToCart")]
    public ActionResult AddToCartFromDetails(int productId = 0, int quantity = 1)
    {
        return RedirectToAction("AddToCart", new {productId , quantity});
    }

}

Вот мой маршрут на Global.asax:

    routes.MapRouteLowerCase(
       "AddToCart", // Route name
       "products/addtocart/{productId}", // URL with parameters
       new { controller = "Cart", action = "AddToCart", productId = UrlParameter.Optional } // Parameter defaults
    );

Вот моя форма, которая не переходит к действию [HttpPost]на моем CartController:

@using (Html.BeginForm("AddToCart", "Cart", null, FormMethod.Post, null))
{
<div class="quantity-container">
    <div>
        Quantity :</div>
    <input type="text" name="quantity" value="1" />
    <input type="hidden" name="productId" value="@Model.ItemDetails.ItemMasterId" />
</div>
<div class="buy-btn-container">
    <input type="image" src="@Url.Content("~/Content/Images/buynow_btn.png")" alt="Buy"/>
</div>
<div class="clear">
</div>
}

URL-адрес формы соответствует моему маршруту, указанному выше:

/products/addtocart

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Поместите ваш маршрут выше маршрута по умолчанию в global.asax. Он соответствует как маршруту по умолчанию, так и вашему конкретному. Поэтому MVC использует тот, который находит первым.

Кажется, что MVC делает что-то странное в BeginForm, так как ваш маршрут работает для GET? Поэтому я бы вместо этого переключился на BeginRouteForm:

http://msdn.microsoft.com/en-us/library/dd505047.aspx

0 голосов
/ 23 февраля 2012

Имя вашего действия «Добавить в корзину» используется дважды с одними и теми же параметрами (два целых и оба необязательных для загрузки), поэтому MVC не может сделать различие, когда необходимо направить соответствующий URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...