【问题标题】:mvc 3 - Automatically going to HttpPostmvc 3 - 自动转到 HttpPost
【发布时间】:2012-09-28 02:42:27
【问题描述】:

我有一个动作如下:

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

【问题讨论】:

  • @SLaks。问题在于按钮的类型。

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


【解决方案1】:

您需要按钮为submit 按钮:

变化:

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

收件人:

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

【讨论】:

  • 谢谢。我最初尝试过像您所说的那样提交,但没有奏效。然后我使用按钮,然后在 jquery 中放置 window.location.href。不过我会再试一次。另外,我使用按钮的方式是 window.location.href 是进入控制器/动作的唯一方法。我之前用 .$post 尝试过,但它进入控制器/动作,然后返回 jquery 脚本
  • location.href 将发出一个 GET 并且您不会获得任何表单数据。如果你想用 javascript 提交,你需要在表单上调用 submit() 方法。
【解决方案2】:

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

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

【讨论】:

  • 问题是他没有提交按钮。
【解决方案3】:

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

你必须通过不同的签名来区分这两个相似的命名方法。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多