将Selected DropDownList值发送到HomeController ActionResult

时间:2017-09-28 15:34:55

标签: c# asp.net asp.net-mvc-4 model actionresult

您好我有一个下拉列表,该列表由配置中的逗号分隔值填充。这很好用。

我要做的是将按钮单击上的选定值发送到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部分我只想看到输出中至少打印出选定的值。)

3 个答案:

答案 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”时,将调用第二个操作而不是第一个操作。

在第二个操作中,您将执行数据库交互,收集所需的任何数据,并在必要时在响应中包含模型或一些其他数据。