MVC C#在页面加载时将所选项目检索到下拉列表中

时间:2014-10-17 17:49:08

标签: c# asp.net-mvc

我在视图和按钮中有一个下拉列表。现在,当我单击按钮时,它会根据下拉列表值的值加载数据。过滤工作并完美显示页面,但下拉列表值保持重新设置。我希望它能够检索最后选择的值。

这是我的页面AllDates.cshtml的视图,该按钮将过滤并再次返回相同的页面:

@{

ViewBag.Title = "All Cars";

}

<form name="filter" action="~/Home/AllDates" method="post" >
 <select id="fly" name='fly' >
 <option value='Any'>Any</option>
 <option value='plane'>plane</option>
 <option value='kyte'>kyte</option>
 </select>
 <input id="Refine" type="Submit" value="Refine" />

这是我的控制器。我曾被告知使用Request调用控件不是一个好选择,但我是MVC的新手,似乎很难。

public ViewResult AllDates() {

                     Session["fly"] = Request["fly"];



          var  allDates = MyObjectToPreview;

          return View(allDates);
      }

这很有效,但是现在我的意思是如何在视图加载后将会话[&#34; fly&#34;]检索到下拉列表中?

3 个答案:

答案 0 :(得分:4)

首先,您无需将其保存到Session。这是一个不必要的步骤,不会给你任何东西。其次,您手动定义select,这意味着Razor没有机会做任何设置所选值的事情。如果您手动构建select,那么您还负责手动设置所选值,例如:

<select id="fly" name="fly">
    <option value="Any" @(Request["fly"] == "Any" ? "selected" : string.Empty)>Any</option>
    ...
</select>

更好的方法是让Razor为您处理选择列表:

@Html.DropDownList("fly", new List<SelectListItem>
{
    new SelectListItem { Text = "Any", Value = "Any" },
    ...
})

由于Razor参与构建HTML,现在,它可以根据Request["fly"]的值正确选择正确的选项。

答案 1 :(得分:2)

您可以使用ViewBag并在View中访问ViewBag,如​​:

public ViewResult AllDates() {
   ViewBag.FlyVal = Request["fly"];
...
}

并在document.ready中查看:

<script>
$( document ).ready(function() {

$("#fly").val('@ViewBag.FlyVal');

});
</script>

另一种方法是使用ajax请求添加过滤器

[HttpPost]
public ActionResult AllDates(string filter) {
   ViewBag.FlyVal = Request["fly"];
...
return json();
}

//Client
$.ajax({
type: "POST",
url: 'Action URL',
contentType: "application/json; charset=utf-8",
data: {filter : $("#fly").val()},
dataType: "json",
success: function(result) {
alert(result);        
}
});

答案 2 :(得分:0)

您也可以使用viewdata

public ActionResult Viewresult()
{
    ViewData["flyval"] = request["fly"];
    return View();
} 

在视图中:

@ViewData["Flyval"]