如何从MVC中的布局页面提交表单?

时间:2013-12-22 19:49:20

标签: c# asp.net-mvc

在我的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>

2 个答案:

答案 0 :(得分:6)

使用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>
}

答案 1 :(得分:3)

Rogier的回答是正确的,但我注意到你的表单标签有一些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