我试图让我的Html.DropDownList保留一些用户选择的值。
代码将使用SelectList中的选定值来保留值,以使下拉列表保留用户先前选择的值。该页面是在MVC环境下构建的。在尝试了一段时间后,我发现网页只能返回到其原始状态(在用户选择任何内容之前),但在按下提交按钮后无法保留任何下拉列表值。
我还使用jQuery来控制多个下拉列表的显示和隐藏,我只需要一个组下拉列表就可以显示,并且当值被选中时显示另一个下拉列表(零售,公交车,自行车,轨道等)。是组dropdownlist的值和附加dropdownlist的名称)。
下面是我的代码:控制器:
public List<SelectListItem> SetGroup(string group)
{
List<SelectListItem> groups = new List<SelectListItem>();
groups.AddRange(new SelectList(GMManager.FindAllGroup(), "MerchantNo", "MerchantName", group));
groups.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return groups;
}
public List<SelectListItem> SetRetail(string retail)
{
List<SelectListItem> retails = new List<SelectListItem>();
retails.AddRange(new SelectList(GMManager.FindAllRetail(), "MerchantNo", "MerchantName",retail));
retails.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return retails;
}
public List<SelectListItem> SetBus(string bus)
{
List<SelectListItem> buses = new List<SelectListItem>();
buses.AddRange(new SelectList(GMManager.FindAllBus(), "MerchantNo", "MerchantName",bus));
buses.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return buses;
}
public List<SelectListItem> SetBike(string bike)
{
List<SelectListItem> bikes = new List<SelectListItem>();
bikes.AddRange(new SelectList(GMManager.FindAllBike(), "MerchantNo", "MerchantName",bike));
bikes.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return bikes;
}
public List<SelectListItem> SetTrack(string track)
{
List<SelectListItem> tracks = new List<SelectListItem>();
tracks.AddRange(new SelectList(GMManager.FindAllTrack(), "MerchantNo", "MerchantName",track));
tracks.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return tracks;
}
public List<SelectListItem> SetParking(string parking)
{
List<SelectListItem> parkings = new List<SelectListItem>();
parkings.AddRange(new SelectList(GMManager.FindAllParking(), "MerchantNo", "MerchantName",parking));
parkings.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return parkings;
}
public List<SelectListItem> SetOutsourcing(string outsourcing)
{
List<SelectListItem> outsourcings = new List<SelectListItem>();
outsourcings.AddRange(new SelectList(GMManager.FindAllOutsourcing(), "MerchantNo", "MerchantName",outsourcing));
outsourcings.Add(new SelectListItem() { Text = "ALL", Value = "ALL", Selected = false });
return outsourcings;
}
public ActionResult RPT_160501()
{
string start = DateTime.Now.ToString("yyyyMMdd");
string end = DateTime.Now.ToString("yyyyMMdd");
string group = "";
string retail = "";
string bus = "";
string bike = "";
string track = "";
string parking = "";
string outsourcing = "";
DataTable dt = null;
if (Request.Form["searchConfirm"] != null || Request.Form["ExportExcel"] != null)
{
start = Request.Form["startDate"];
end = Request.Form["endDate"];
group = Request.Form["group"];
retail = Request.Form["retail"];
bus = Request.Form["bus"];
bike = Request.Form["bike"];
track = Request.Form["track"];
parking = Request.Form["parking"];
outsourcing = Request.Form["outsourcing"];
}
ViewBag.Group = SetGroup(group);
ViewBag.Retail = SetRetail(retail);
ViewBag.Bus = SetBus(bus);
ViewBag.Bike = SetBike(bike);
ViewBag.Track = SetTrack(track);
ViewBag.Parking = SetParking(parking);
ViewBag.Outsourcing = SetOutsourcing(outsourcing);
ViewBag.RepName = "ReportName";
ViewBag.Start = start;
ViewBag.End = end;查看:
<script>
$(document).ready(function () {
$("#retail").hide();
$("#bus").hide();
$("#bike").hide();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").hide();
$("#group").on("change", function () {
switch ($(this).val()) {
case "RETAIL":
$("#retail").show();
$("#bus").hide();
$("#bike").hide();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").hide();
break;
case "BUS":
$("#retail").hide();
$("#bus").show();
$("#bike").hide();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").hide();
break;
case "BIKE":
$("#retail").hide();
$("#bus").hide();
$("#bike").show();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").hide();
break;
case "TRACK":
$("#retail").hide();
$("#bus").hide();
$("#bike").hide();
$("#track").show();
$("#parking").hide();
$("#outsourcing").hide();
break;
case "PARKING_LOT":
$("#retail").hide();
$("#bus").hide();
$("#bike").hide();
$("#track").hide();
$("#parking").show();
$("#outsourcing").hide();
break;
case "BANK_OUTSOURCING":
$("#retail").hide();
$("#bus").hide();
$("#bike").hide();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").show();
break;
default:
$("#retail").hide();
$("#bus").hide();
$("#bike").hide();
$("#track").hide();
$("#parking").hide();
$("#outsourcing").hide();
break;
}
})
})
</script>
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.RepName</title>
<h2>@ViewBag.RepName</h2>
@using (Html.BeginForm("RPT_160501", "ReportSystem", FormMethod.Post, new { id = "searchForm" }))
{
<div>
<label for="startDate"> Date:</label>
<input type="text" name="StartDate" id="StartDate" value="@ViewBag.Start" style="width:100px;" /> ~
<input type="text" name="EndDate" id="EndDate" value="@ViewBag.End" style="width:100px;" />
@Html.DropDownList("group", (IEnumerable<SelectListItem>)ViewBag.Group, "--Please Choose--")
@Html.DropDownList("retail", (IEnumerable<SelectListItem>)ViewBag.Retail, "--Please Choose--")
@Html.DropDownList("bus", (IEnumerable<SelectListItem>)ViewBag.Bus, "--Please Choose--")
@Html.DropDownList("bike", (IEnumerable<SelectListItem>)ViewBag.Bike, "--Please Choose--")
@Html.DropDownList("track", (IEnumerable<SelectListItem>)ViewBag.Track, "--Please Choose--")
@Html.DropDownList("parking", (IEnumerable<SelectListItem>)ViewBag.Parking, "--Please Choose--")
@Html.DropDownList("outsourcing", (IEnumerable<SelectListItem>)ViewBag.Outsourcing, "--Plase Choose--")
<input type="submit" name="searchConfirm" value="Search" class="btn btn-default" />
<input type="submit" name="ExportExcel" value="Export Excel" class="btn btn-default" />
</div>
}
<table class="grid" width="100%">
<thead>
<tr style="background-color: lightgray">
<th>
A
</th>
<th>
B
</th>
<th>
C
</th>
<th>
D
</th>
</tr>
</thead>
<tbody>发布于 2017-02-07 17:10:28
您没有按照预期使用MVC。操作方法MVC应该有一个强类型的ViewModel对象作为参数,允许RPT_160501解析和绑定发布的表单值,而不是您自己做这一切。
同样的道理也适用于视图,它似乎也没有@model声明,因为ViewBag用于所有东西。
在解析和绑定的同时,MVC还会填充全局ModelState对象,MVC还会在内部使用该对象来呈现已发送或尝试的值,只要你使用Html.DropDownListFor(m => m.group, ....) <--这是我对你的问题的回答,但它只有在你整体上采用这种方法时才有效。
当然有一些方法可以在不使用ViewModel的情况下完成所需的工作,但这只会让您在错误的道路上走得更远。最好停在这里,学习正确的方法,然后更轻松地继续进行。
例如,有关此问题的更多信息,请参阅此问题:MVC ViewModel example
https://stackoverflow.com/questions/42085408
复制相似问题