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"]检索到下拉选择项中?

MVC C#在页面加载时将selecteditem检索到Dropdownlist中

首先,您不需要将其保存到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"]