0

我有一个动作如下:

    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 同名)

4

3 回答 3

3

您需要按钮成为submit按钮:

改变:

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

到:

<input type="submit" id="SaveChanges" value="Save" />  
             ^^^^^^
于 2012-09-28T02:56:18.750 回答
1

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

然后当表单的方法是get时,它会转到第一个,而如果表单的方法是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操作方法。

于 2012-09-28T06:29:28.283 回答
0

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

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

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

HttpPost 方法将被调用,要么您使用提交类型的按钮,要么您的输入类型是按钮,但使用 jquery,您在按钮单击时进行 ajax 调用,并且您的 ajax 类型是“Post”$.ajax({ url:“Action”类型: "发布" },succees: function(){alert('succeed');});

于 2014-06-18T04:12:31.557 回答