Html.BeginForm不调用MVC中的action方法

时间:2014-08-03 15:12:32

标签: asp.net-mvc asp.net-mvc-routing

我有一个部分观点:

@model MsmStore.Domain.Products

<h3 class="lead">
    @Model.Name
</h3>
@*        <img src="~/images/MainLogo.jpg"/>*@
<p>
    @Model.Decription
</p>
<p>
    @Model.Price
</p>

@using (Html.BeginForm("UpdateBasketSummary", "Order", new { ProductID = Model.ID }))
{
    @Html.Hidden("ProductID", Model.ID)
    <input type="button" value="Click" />
}

这个Html.BeginForm不会调用action方法(UpdateBasketSummary)。

这是我的行动方法:

    [HttpPost]
    public PartialViewResult UpdateBasketSummary(string ProductID)
    {
//          orderRepository.AddToCart(ProductID, 1);
            return PartialView("BasketSummary", ProductID);
    }

这是我的路由代码:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(null, "{controller}/{action}");

4 个答案:

答案 0 :(得分:3)

默认情况下,带有类型按钮的输入不会提交表单。您需要将其更改为

 <input type="submit" value="click" />

<button type="submit" value="click" />

答案 1 :(得分:1)

输入类型按钮不会发布您的表单,请将其替换为..

<input type="submit" value="Click" />

答案 2 :(得分:0)

请试试这个:

@using (Html.BeginForm("UpdateBasketSummary", "Order"))
{
    @Html.Hidden("ProductID", Model.ID)
   <input type="button" value="Click" />
}

[HttpPost]
public PartialViewResult UpdateBasketSummary(int ProductID)
{
   //orderRepository.AddToCart(ProductID, 1);
   return PartialView("BasketSummary", ProductID);
}

顺便说一句。您无需在ProductID中发送BeginForm,因为您已经Hidden field

编辑:由于@Ben Griffiths回答: 您还需要将type='button'更改为type='submit'当然

答案 3 :(得分:0)

您的操作需要http方法POST,但您的beginForm调用不会将http方法设置为POST。如果没有显式设置http方法,您将被迫使用默认值,这是一个GET。