将下拉选择值传递给控制器

时间:2016-09-08 01:45:15

标签: asp.net-mvc razor

我在MVC应用程序中玩游戏并试图弄清楚看起来非常简单的事情。

我的Index.cshtml文件夹中有一个Views/Home/文件非常简单(下方)

索引视图

...
    <div>
        Search
        @Html.DropDownList("selection", MyProject.Util.Lists.GetMyList(), "Select One")
        @Html.ActionLink("Search", "Index", "Search", new { st = xxx }, null)
    </div>
...

我还有一个搜索控制器需要采取&#34; st&#34;价值,看起来像这样

public class SearchController : Controller
{
    // GET: Search
    public ActionResult Index(string st)
    {
        ApplicationDbContext db = new ApplicationDbContext();

        List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList();

        return View(filteredReports);
    }
}

我不确定如何从下拉列表中选择从中选择的值,并将其添加到我刚才拥有的Html.ActionLink&x; xxx&#39;现在

2 个答案:

答案 0 :(得分:0)

单击该链接通常会对链接的href属性值执行新的GET请求。它不会从您的表单中发送任何数据。

你需要使用javascript并劫持链接上的click事件,并将SELECT元素中选定的选项值作为查询字符串附加到该元素并发送它。

所以给链接一个id,你可以在以后用它来点击click事件

dbpath

和javascript

@Html.ActionLink("Search", "Index", "Search", null, new {@id="search"})

另一种选择是使用表单提交。将select元素包装在表单中,并有一个submt按钮,将表单发送到action方法。此方法不需要javascript。但您的选择输入元素名称应与您的参数名称相匹配

$(function(){

  $("#search").click(function(e){
    e.preventDefault();
    window.location.href=$(this).attr("href")+"?st="+$("#selection").val();
  });

});

如果您不喜欢按钮,但需要link元素,则可以使用javascript提交表单(就像我们在第一种方法中所做的那样)。使用此方法,您无需手动附加查询字符串。

答案 1 :(得分:0)

你必须调用一个存储所选值的控制器的AJAX POST调用,然后当你的动作链接事件触发从那里获得存储值时。

<强> AJAX:

$.ajax(
{
    url:your url,
    data:{"st":dropdown selected value},
    type:"post"
});

<强>控制器:

public ActionResult Index()
{
    string st=TempData["st"].ToString();
    ApplicationDbContext db = new ApplicationDbContext();

    List<Report> filteredReports = db.Reports.Where(r => r.Tag == st).ToList();

    return View(filteredReports);
}

public void SetSt(string st)
{
    TempData["st"] = st;
}