动作不会触发

时间:2012-02-23 11:36:17

标签: asp.net-mvc-3

这是我的控制器签名:

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
    );

这是我的表单,它不会转到我的CartController上的[HttpPost]操作:

@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>
}

表格的网址确实解析为我在上面设置的路线:

/products/addtocart

2 个答案:

答案 0 :(得分:0)

您的操作名称“添加到购物车”使用两次相同的参数(两个整数,两个都是可选的引导),因此当必须路由匹配的URL时,MVC无法区分。

答案 1 :(得分:0)

将您的路线置于global.asax的默认路线之上。它匹配默认路由和您的特定路由。因此,MVC使用它首先找到的那个。

似乎MVC在BeginForm中做了一些奇怪的事情,因为你的路由适用于GET?因此我会转而使用BeginRouteForm:

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