MVC C#在页面加载时将selecteditem检索到Dropdownlist中
本文关键字:检索 selecteditem Dropdownlist 加载 MVC | 更新日期: 2023-09-27 18:26:52
我在视图中有一个下拉列表和一个按钮。现在,当我单击按钮时,它会根据dropdownlist值加载数据。过滤可以正常工作并完美地显示页面,但dropdownlist值会不断重新设置。我希望它检索最后一个选定的值。
这是我对页面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);
}
这很有效,但现在我该如何在加载视图后将会话["fly"]检索到下拉选择项中?
首先,您不需要将其保存到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"]
的值正确地选择正确的选项。
您可以从ViewBag使用,并在视图中访问ViewBag,如:
public ViewResult AllDates() {
ViewBag.FlyVal = Request["fly"];
...
}
和在文档中查看。备用:
<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);
}
});
您也可以使用viewdata
:
public ActionResult Viewresult()
{
ViewData["flyval"] = request["fly"];
return View();
}
视图:
@ViewData["Flyval"]