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

3
在我的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个回答

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

你的答案是正确的,但另一个答案更完整,因为他关注我在这个表单中使用的CSS。无论如何,还是谢谢你。 - gog
1
我知道这是这样的,但我不是为你构建代码的人。我给了正确方向的提示,如果你检查参数列表,就会清楚方法需要什么 :-) - Roger Far
我并不期望你为我构建代码。如果你的帖子是唯一的,我可能会投票选择它作为正确答案。 - gog

3
罗杰的回答是正确的,但我注意到你的表单标签有一些HTML属性,在这种情况下,您需要使用不同的Html.BeginForm()重载:
@using (Html.BeginForm("action", "controller",
   FormMethod.Post, new { @class = "navbar-form navbar-left", role = "search" }))
{
    // ...
}

在C#中,class是一个关键字,因此需要使用前缀@来标识,否则会产生错误。

以上代码假设您正在使用POST提交表单。如果您改用GET,只需将表单方法更改为FormMethod.Get即可。


1
谢谢John,它完美地工作了。CSS样式也很好。 - gog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接