mvc 3 - 自动转到HttpPost

时间:2012-09-28 02:42:27

标签: c# asp.net asp.net-mvc http-post actionmethod

我的行动如下:

    public ActionResult ChangeFeeCheck(string id)
    {

       ViewBag.id = id;
       return View();
    }

在我的视图中,我有以下内容:

    @{
      ViewBag.Title = "CreateList";
     }



     Please enter first name <br /><br />


    @using (Html.BeginForm())
    {

    @Html.Textbox("firstname")

    <input type="button" id="SaveChanges" value="Save" />  
    }    

当我点击按钮时,我期待以下

    [HttpPost]
public ActionResult ChangeFeeCheck(string firstname)
    {
      .....

    }

我不确定MVC什么时候会自动转到HttpPost,或者当我需要手动将它放在那里时。在上面,它不直接去那里。我必须使用

    window.location.href

并传递控制器/动作的url。

含义,不是

的默认值
    Html.BeginForm()

HttpPost(与HttpGet同名)

3 个答案:

答案 0 :(得分:3)

您需要按钮为submit按钮:

变化:

<input type="button" id="SaveChanges" value="Save" />  
             ^^^^^^

要:

<input type="submit" id="SaveChanges" value="Save" />  
             ^^^^^^

答案 1 :(得分:1)

如果您在此处遵循“约定优于配置”规则,那么您在此处创建的视图必须用于ChangeFeeCheck操作,此处ChangeFeeCheck看起来会使编译器混淆为无过载,同名,相同的签名。

然后当表单的方法获取时它将转到第一个,而如果表单的方法是POST,它将调用用[HttpPost]

装饰的那个

因为您正在使用提交按钮,默认情况下生成的HTML表单使用POST操作,它会调用[HttpPost]

您可以参考此文章(来自互联网档案,因为原始链接现已关闭):https://web.archive.org/web/20120527133344/http://microsoftmentalist.com:80/2011/09/07/asp-net-mvc-difference-between-httpget-and-httppost-with-example/

例如,请参阅GETPOST操作方法的重载方式。

答案 2 :(得分:0)

首先,同一个签名同名方法不能在同一个控制器中编译它会给你编译错误已经有相同参数类型的成员。

您必须通过不同的签名区分这两个相似的名称方法。

关于HttpPost和HttpGet,只要您需要检索数据或者为该视图调用页面加载,就会调用get方法。

HttpPost方法将被调用您使用的是提交类型的按钮或您的输入类型是按钮但是使用jquery您在按钮单击时给出ajax调用并且您的ajax类型是“Post” $就({ 网址:“行动” 类型:“发布” },successes:function(){alert('succeed');});