【问题标题】:Can I use GET and POST with the same asp mvc .net Controller?我可以在同一个 asp mvc .net 控制器上使用 GET 和 POST 吗?
【发布时间】:2013-07-10 20:20:26
【问题描述】:

使用 asp .net mvc,我使用 post 和 get 提交表单。在我的控制器中,我只能访问 post 参数,但不能访问 GET 参数。

这是我的 HTML 表单:

<form name="input" action="/account/Login/?test=123" method="post">
   Username: <input type="text" name="username">
   Lastname: <input type="text" name="lastname">
   Password: <input type="text" name="password">
<input type="submit" value="Submit">
</form>

我的控制器:

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Login(User model)
{
   string test = Request.QueryString["test"]; // this is null
}

我也为我的控制器尝试过这个,但无济于事......

[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
    public ActionResult Login(User model, string test)
    {
        // but "test" is also  null
    }

【问题讨论】:

  • 用户模型的字段post后绑定正常吗?

标签: .net asp.net-mvc forms controller http-post


【解决方案1】:

您的示例非常适合我。在这两种动作中,我得到 test=123

您也可以尝试使用Html.BeginForm() helper:

@using(Html.BeginForm("Account", "Login", new { test = "123" }, FormMethod.Post))
{
   @:Username: <input type="text" name="username"/>
   @:Lastname: <input type="text" name="lastname"/>
   @:Password: <input type="text" name="password"/>
   <input type="submit" value="Submit"/>
}

【讨论】:

  • 你如何获得测试?像这个字符串 test = Request.QueryString["test"]; ?请给我看看你的控制器好吗?
  • 是的,第二种方式(使用字符串测试作为第二个参数)对我有用。所以我问你是否让用户模型与表单中的数据绑定?
  • “用户模型与表单中的数据绑定”是什么意思?对不起,我还是个初学者。感谢您的帮助顺便说一句
  • 你能在字符串 test = Request.QueryString["test"]; 上设置断点吗?并与调试共进午餐。然后在表单中填写输入并提交。当你得到断点时,你是否在 User 模型中看到了表单中的数据?
【解决方案2】:

这不是 HTTP 动词的工作方式。

GET 和 POST 不是两种传递数据的方式;它们是两种不同类型的 HTTP 请求。 (只有 POST 有负载)


您要求一个查询字符串参数

但是,浏览器会从表单操作 URL 中删除查询字符串参数。
HTTP 请求根本不包含它。

相反,您应该将其放入&lt;input type="hidden"&gt;

【讨论】:

  • 谢谢你的回答,那么我怎样才能访问用户名、姓氏、密码和测试?我不能通过隐藏我真的需要使用 get 方法进行测试
  • @user2037696:什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
相关资源
最近更新 更多