【问题标题】:How do I correctly post form data to a controller action?如何正确地将表单数据发布到控制器操作?
【发布时间】:2016-04-06 04:22:27
【问题描述】:

我无法将数据从表单发布到控制器操作。我已经使用 HTML.BeginForm() 创建了表单,并且我有一个控制器,当我手动创建查询字符串时它可以正常工作,但我不明白如何使表单与我的控制器操作一起工作。

<form class="navbar-form navbar-left">
                    <div class="form-group>
                        @using (Html.BeginForm("GeneralSearch", "Search", FormMethod.Post))
                        {
                            @Html.TextBox("searchString")

                            <button type="submit" class="default">Submit</button>
                        }

                    </div>
                </form>

然后在我的控制器中,我目前有 ASP.NET 自动放置在那里的HttpGet 属性。但是,如果我将其更改为HttpPost,问题仍然存在。

    [HttpGet]
    public ActionResult GeneralSearch(string searchString)
    {
        return View("SearchResult", viewModel);
    }

当我输入文本并提交表单时,网络请求被发送到:

http://localhost:64562/?searchString=test

它只是加载默认控制器和操作,而不是我在using 语句中指定的“搜索”控制器。如何正确发布到特定操作?

【问题讨论】:

  • 查看表单呈现的 html。您需要输入 name="searchString" 才能使绑定生效。此外,表单操作是 Post,但您的操作标记为 [HttpGet]。 GET 参数通过查询字符串传递,POST 参数通过请求正文传递。
  • Textbox方法中给的名字不就是HTML中使用的名字吗?
  • @user9993 - 你最好完成一个在线教程或做一些阅读。像Getting Data From View to Controller in MVC 这样的东西。另一种方法是煞费苦心地一次又一次地绊倒它。

标签: c# asp.net-mvc


【解决方案1】:

Html.BeginForm( 添加了一个 &lt;Form&gt; 标记,但我看到您正在尝试将表单标记添加到另一个表单标记中,如下所示;这是错误的。

<form class="navbar-form navbar-left">
                    <div class="form-group>
                        @using (Html.BeginForm("GeneralSearch", "Search",

同样,您的控制器必须公开不同的操作方法来满足 GETPOST 请求,而您应该拥有

public ActionResult GeneralSearch()
{
    return View();
}

[HttpPost]
public ActionResult GeneralSearch(string searchString)
{
    return View("SearchResult", viewModel);
}

【讨论】:

    【解决方案2】:

    您正在 POST 到一个正在侦听 GET 的方法。

    切换表单方法

    @using (Html.BeginForm("GeneralSearch", "Search", FormMethod.Get))
    

    【讨论】:

    • 您可能应该在控制器操作中添加一些关于现有HttpGet 的内容。
    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 2021-10-14
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    相关资源
    最近更新 更多