【问题标题】:How to submit a form from layout page in MVC?如何从 MVC 中的布局页面提交表单?
【发布时间】:2013-12-22 19:49:19
【问题描述】:

在我的 MVC 4 站点中,我在 _Layout 母版页中定义了一个通用顶部菜单。在该菜单中,我有一个搜索输入文本框,与 stackoverflow 站点中的菜单几乎相同,但我在搜索输入文本字段之外有一个提交按钮。

当我点击那个按钮时,如何触发一个动作并将该表单提交给某个控制器?在MVC中可以吗?

这是表单的代码:

<form class="navbar-form navbar-left" role="search">
    <div class="form-group">
        <input type="text" id="teste" data-provide="typehead" class="form-control" placeholder="Procurar" autocomplete="off">
    </div>
    <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
</form>

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    使用 MVC razor 语法而不是创建自己的表单:

    @using(Html.BeginForm("MyAction", "MyController"))
    {
        <div class="form-group">
        <input type="text" id="teste" data-provide="typehead" class="form-control" placeholder="Procurar" autocomplete="off"></div>
        <button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-search"></span></button>
    }
    

    【讨论】:

    • 你的答案是对的,但另一个更完整,因为他担心这个表单使用的 css。不过还是谢谢。
    • 我知道是,但我不是为您构建代码的人。我朝正确的方向轻推,如果您检查了参数列表,就会清楚该方法的预期:-)
    • 我没想到你会为我构建代码。如果您的帖子是唯一的,我可能会投票为正确答案。
    【解决方案2】:

    Roger 的回答是正确的,但我注意到您的表单标签有一些 HTML 属性,在这种情况下,您需要使用不同的 Html.BeginForm() 重载:

    @using (Html.BeginForm("action", "controller",
       FormMethod.Post, new { @class = "navbar-form navbar-left", role = "search" }))
    {
        // ...
    }
    

    @ 符号前缀 class 是必需的,因为 class 是 C# 中的关键字。没有它会产生错误。

    上面的代码假设您是POSTing 您的表单。如果您改用GET,只需将表单方法更改为FormMethod.Get

    【讨论】:

    • 谢谢约翰,它就像一个魅力。还有 css 样式。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多