Asp.Net MVC下拉列表值作为参数

时间:2017-09-04 14:09:58

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

我在视图中有一个下拉列表。我想要的是,每当用户选择Dropdownlist中的值时,控制器将获取所选值并将其用作查询数据库的参数。

以下是观点:

 @using (Html.BeginForm("Index", "Home"))
{

     @Html.DropDownList("Dropdown", new List<SelectListItem>
                       {new SelectListItem {Text="All Assignments", Value = "All" },new SelectListItem {Text="Open Assignments", Value = "Admin"},
                       new SelectListItem{Text="Close Assignments", Value = "Admin"}},"Select One", new { @class = "form-control", style = "width:300px; height:35px;" })

    <h3 style="margin-top:10px;">List of Assignment</h3>
      <table id="myTable" class="table table-hover table-striped">
          //Table Content
      </table>


}

这是控制器:

public ActionResult Index(string username)
        {
            string val = Request.Form["Dropdown"];
            val = Request["Dropdown"];
            string nama = string.Empty;
            if (val == null)
            {
                nama = "admin";
            }
            else
            {
                nama = val;
            }

            if (Session["username"] != null)
            {

                string user = Session["username"].ToString();
                SqlConnection conn = new SqlConnection(connString);
                conn.Open();
                string sqlQuery = @"select Animals, Gender from dbo.Animals where Pemilik = @user";

                //string h = x => x.
                SqlCommand cmd = new SqlCommand(sqlQuery, conn);
                cmd.Parameters.AddWithValue("@user", nama);
                DataTable dt = new DataTable();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                conn.Close();
                return View(dt);
            }
            else
            {
                return RedirectToAction("Login", "Login");
            }

        }

我尝试使用FormCollection获取下拉列表选择值,但是显示为Object Reference Not Set To An Instance Of object。所以我决定使用Request.Form。但是,我仍然不确定string val是否包含值。

1 个答案:

答案 0 :(得分:0)

如果您将表单提交给操作方法,则代码string val = Request.Form["Dropdown"];将起作用。但由于您希望每次用户更改选项时都要发送值,您需要通过javascript提交表单。您可以在SELECT元素上侦听change事件并提交表单。

以下javascript代码将执行tit。

$(function () {

    $("#Dropdown").change(function(e) {
        $(this).closest("form").submit();
    });

});

现在在action方法中放置一个断点,并在执行val行后检查string val = Request.Form["Dropdown"];变量的值。

或者,您可以在操作方法中添加名称与SELECT元素名称匹配的参数。

public ActionResult Index(string username,string Dropdown)
{
  string val = Dropdown;
  // to do : Return something
}