您好我有一个下拉列表,该列表由配置中的逗号分隔值填充。这很好用。
我要做的是将按钮单击上的选定值发送到HomeController中的ActionResult。
我创建了一个带有字符串的模型。当我按下按钮时出现错误:
未找到视图'TestAction'或其主控或没有视图引擎支持搜索的位置。
这就是我的控制器的样子:
[HttpPost]
[ActionName("TestAction")]
public ActionResult TestAction(SQL_Blocks_App.Models.DropdownList SelectedValue)
{
//System.Diagnostics.Debug.WriteLine(SelectedValue);
return View();
}
这就是我的模型:
public class DropdownList
{
//
// GET: /DropdownList/
[Display(Name = "Servers")]
public string SelectedValue{ get; set; }
}
这就是我的索引视图:
<form id="SelectedValue" action="/Home/TestAction" method="post" style="margin: 0">
<div class="col-lg-5">
@{
ViewBag.Title = "Index";
}
@Html.DropDownList("YourElementName", (IEnumerable<SelectListItem>)ViewBag.DropdownVals, "--Choose Your Value--", new
{
//size = "5",
style = "width: 600px"
})
</div>
<div class="col-lg-5">
<input type="submit" value="Run Query" />
<input id="Button2" type="button" value="Clear" onclick="window.location.reload()" />
</div>
</form>
我想澄清一下。我的最终目标是在ActionResult中的SQL查询中使用所选值,并将结果返回到索引,以便我可以将它们填入表中。 (你现在不必告诉我如何编写SQL部分我只想看到输出中至少打印出选定的值。)
答案 0 :(得分:1)
重定向到索引操作,并传递参数
[HttpPost]
[ActionName("TestAction")]
public ActionResult TestAction(SQL_Blocks_App.Models.DropdownList _selectedValue)
{
//System.Diagnostics.Debug.WriteLine(SelectedValue);
return RedirectToAction("Index", "[Controller]", new {@_selectedValue = _selectedValue });
}
然后你的Index方法应该接受参数。
[HttpGet]
public ActionResult Index(SQL_Blocks_App.Models.DropdownList _selectedValue)
{
//use _selectedValue
}
我建议使用索引以外的其他方法,或者让Dropdownlist为nullable /设置默认值。
答案 1 :(得分:0)
您的TestAction方法正在返回View。确保View TestAction.cshtml存在且位于Home文件夹中。
答案 2 :(得分:0)
return View()
的默认框架行为是返回与当前正在执行的操作同名的视图。这是TestAction
。错误告诉您没有找到这样的视图。
你有几个选择。您可以创建视图,也可以返回其他内容。例如,如果要重定向回Index
,则可以返回重定向结果:
return RedirectToAction("Index");
你可以在响应中指定Index
视图:
return View("Index");
但是,请注意,TestAction
的网址仍然是Index
而不是,这可能会导致意外的更改行为,如果你不知道这一点。
编辑:根据对此答案的评论,听起来您真正想要的是构建通常在同一视图上操作的对操作。这对于索引视图并不常见,但对于编辑视图非常常见。唯一的区别是语义,从结构上讲,这个概念可以在任何地方使用。
考虑两个动作:
public ActionResult Index()
{
// just show the page
return View();
}
[HttpPost]
public ActionResult Index(SQL_Blocks_App.Models.DropdownList SelectedValue)
{
// receive data from the page
// perform some operation
// and show the page again
return View();
}
这两个操作之间的请求只会因HTTP动词(GET或POST)而不同,而不是URL上的操作名称。那个名字永远是“索引”。但是当索引视图上的表单通过POST提交并且具有“SelectedValue”时,将调用第二个操作而不是第一个操作。
在第二个操作中,您将执行数据库交互,收集所需的任何数据,并在必要时在响应中包含模型或一些其他数据。