我在视图和按钮中有一个下拉列表。现在,当我单击按钮时,它会根据下拉列表值的值加载数据。过滤工作并完美显示页面,但下拉列表值保持重新设置。我希望它能够检索最后选择的值。
这是我的页面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;]检索到下拉列表中?
答案 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"]