我正在尝试在我正在开发的网络应用中实施基本搜索页面。现在页面看起来像这样
当用户输入姓氏时,控制器会被调用以在后端Microsoft SQL Server数据库中搜索具有该姓氏的所有帐户
现在,HTML表单看起来像这样
@using (Html.BeginForm("SearchAct", "HomeController", FormMethod.Post))
{
<form>
<div>
Last Name:<br>
<input type="text" id="nameToFind">
<input type="button" id="submitId" value="submit" />
</div>
</form>
}
它应该调用此控制器
[HttpPost]
public void SearchAct()
{
Console.WriteLine();
}
最终将执行搜索,然后将结果放在页面上。但是,我无法调用控制器。我在WriteLine上设置了一个断点,所以我知道它永远不会到达那里而且我不知道我做错了什么
答案 0 :(得分:3)
在文本框中添加名称属性。仅基于名称属性构建表单集合。
更改按钮类型以提交,然后它会将您的表单发布到控制器。
@using (Html.BeginForm("SearchAct", "Home", FormMethod.Post))
{
<div>
Last Name:<br>
<input type="text" id="nameToFind" name="nameToFind">
<input type="submit" id="submitId" value="submit" />
</div>
}
@{
if(ViewBag.SearchKey != null)
{
<span>
Search Key: @ViewBag.SearchKey
</span>
}
}
而是Console.WriteLine()
使用ViewBag
将您所需的数据发送回视图
请参阅以下行动
//Get Action for rendering view
public ActionResult SearchAct()
{
return View();
}
[HttpPost]
public ActionResult SearchAct(string nameToFind)
{
ViewBag.SearchKey = nameToFind;
return View();
}
操作参数名称和文本框名称属性值必须相同,否则将null
如果您的表单包含多个文本框,请从FromCollection
或Request
[HttpPost]
public ActionResult SearchAct(FormCollection form)
{
ViewBag.SearchKey = form["nameToFind"];
return View();
}
答案 1 :(得分:2)
首先:使用razor语法创建表单:
@using (Html.BeginForm("SearchAct", "HomeController", FormMethod.Post))
{
}
这将生成如下形式:
<form method="post" action="/HomeController/SearchAct">
</form>
因此,无需在其中创建嵌套表单。
@using (Html.BeginForm("SearchAct", "HomeController", FormMethod.Post))
{
<form> // <- here
<div>
Last Name:<br>
<input type="text" id="nameToFind">
<input type="button" id="submitId" value="submit" />
</div>
</form> // <- here
}
第二:HomeController
会匹配控制器的全名HomeControllerController
。
因此,如果您想点击Home
控制器,请从Controller
HomeController
移除@using (Html.BeginForm("SearchAct", "HomeController", FormMethod.Post)) {}
Thirth:如果你想抓住nameToFind
,你可以尝试:
[HttpPost]
public void SearchAct(string nameToFind)
{
Console.WriteLine();
}
希望这有帮助!
答案 2 :(得分:1)
更正您的表单HomeController
应该只是Home
@using (Html.BeginForm("SearchAct", "Home", FormMethod.Post))
{
<form>
<div>
Last Name:<br>
<input type="text" id="nameToFind">
<input type="button" id="submitId" value="submit" />
</div>
</form>
}
控制器应该接受过滤器的输入参数
[HttpPost]
public void SearchAct(string nameToFind)
{
// filter snomething
Console.WriteLine(nameToFind);
}
答案 3 :(得分:1)
首先,我们不需要两个表单标记,您不需要添加控制器后缀。记得:
@using (Html.BeginForm("SearchAct", "Home", FormMethod.Post))
{
<div>
Last Name:<br>
<input type="text" id="nameToFind" name="nameToFind">
<input type="button" id="submitId" value="submit" />
</div>
}
其次,如果您需要搜索,则需要添加与输入类型文本名称相同的参数:
[HttpPost]
public void SearchAct(string nameToFind)
{
Console.WriteLine();
}