2014-10-26 61 views
29

我正在使用MVC 5 Asp.Net和以下this教程。我想知道这是如何获取结果,当我点击过滤器按钮。@ Html.BeginForm()如何工作?并在Microsoft ASP.Net MVC 5教程中搜索结果?

有来自哪里这个代码是在电影/视图中添加/ Index.cshtml

@using (Html.BeginForm()) 
{  
    <p> Title: @Html.TextBox("SearchString") <br /> 
    <input type="submit" value="Filter" /></p> 
} 

现在,据我所知,它会创建一个文本框按钮在屏幕上的一个点。但是,这个按钮如何调用搜索(索引)函数并传递函数中的文本框的值,我无法得到这个。 012zzPlzz详细说明它,我是新的。对不起,这个愚蠢的东西。谢谢

回答

40

这不是一个愚蠢的问题。 @html.BeginForm()的作品就像这样。它有一些参数可以添加到它,如ActionControllerFormTypehtmlAttributes。它的工作方式是,如果您将其保留为空,它将查找与您现在在页面上具有相同名称的后续操作,例如,如果您处于登录页面上,它将查找登录后操作。我总是写什么actioncontroller我希望它访问。

@html.BeginForm("AddUser", "Admin", FormMethod.Post, new { @class = "my_form"}) 

所以你post action应该接受参数,你的表单包含,这可以是一个ModelProductViewModel或单个字符串参数。在你的情况下,你的行动应该看起来像

[HttpPost] 
public ActionResult Search(string SearchString) 
{ 
    //do something here 
} 

请注意在这里,搜索字符串被传递到方法。 <input>的名称必须与您的操作所需的参数相同。所以我们的形式应该是这样的

@using (Html.BeginForm("Search", "YOUR CONTROLLER", FormMethod.Post)){  
    <p> Title: @Html.TextBox("SearchString") <br /> 
    <input type="submit" value="Filter" /></p> 
} 

希望这会带来清晰。

+1

我的表单是相同的,我说的问题。另外我的行动(索引)功能中的参数是“searchString”,而不是“SearchString”(这里S是大写)。如果大写和小写'S'没有任何区别,那么我接受你的答案。 – 2014-10-26 16:29:41

+1

好吧,我通过改变表单代码中不同字母的大小写来满足答案。它仍然有效。感谢并接受:) – 2014-10-26 16:33:07

+0

有没有一种方法可以简单地使用模型参数?例如,我有一个UserName,UserEmail模型,并希望只有一个参数的模型 - Model。 – FrenkyB 2016-04-28 16:05:01