【发布时间】:2017-09-28 15:34:55
【问题描述】:
您好,我有一个下拉列表,该列表由配置中的逗号分隔值填充。这工作正常。
我要做的是将按钮单击时选择的值发送到 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 部分,我只想看到所选值至少打印在输出中。)
【问题讨论】:
-
关于您的视图的快速问题:为什么要显式构建表单而不是:“@using (Html.BeginForm() { @Html.AntiForgeryToken() ... }”?您可以搭建查看并列出您想要在控制器的 POST 方法中使用您选择的名称的绑定。
-
@CodeBreaker 我不确定你刚才说了什么。我是 MVC 的新手。任何文档或我可以参考的东西? HTML.BeginForm 和我的做法有什么区别?
-
别担心!请查看此处的 MS Doc:msdn.microsoft.com/en-us/library/…。它为 BeginForm() 方法和您可以传递给它的参数提供了一些上下文。本质上,Razor 视图文件中的 BeginForm() 将为您创建 HTML 表单,尽管它可以非常容易地传递动作名称、控制器名称等,并使用 Html.SelectList 或 Html.SelectListFor 将数据传回控制器基于视图中的选择列表名称。我也会创建一个答案来帮助解释。
-
如果可以,尝试使用 MVC 项目的 Scaffolded Item 功能,方法是右键单击项目中的 Views 文件夹,然后将鼠标悬停在“Add >”上并单击“New Scaffolded Item... " 菜单中的选项。这将自动为模型项(表对象、视图模型等)构建所有视图以及控制器和操作,或者它将创建一个空白控制器和视图供您自己填写。如果您提前完成工作以确保您的模型(数据库表结构、视图模型等)强大,脚手架项目非常棒。
标签: c# asp.net asp.net-mvc-4 model actionresult