Asp.net mvc 4 选择post后的下拉值
我希望能得到一些关于我在发布后的dropdownlist(razor)中保留价值的指导 我有一个简单的页面:Asp.net mvc 4 选择post后的下拉值,asp.net-mvc-4,html-helper,Asp.net Mvc 4,Html Helper,我希望能得到一些关于我在发布后的dropdownlist(razor)中保留价值的指导 我有一个简单的页面: @model testContingency.Models.ListByWardDD @{ ViewBag.Title = "TestDropDowns"; } <h2>TestDropDowns</h2> <div> @Html.DropDownList("HospModel", Model.Hospital, ne
@model testContingency.Models.ListByWardDD
@{
ViewBag.Title = "TestDropDowns";
}
<h2>TestDropDowns</h2>
<div>
@Html.DropDownList("HospModel", Model.Hospital, new { @onchange = "ChangeHospital(this.value)" })
@Html.DropDownList("WardModel", Model.Wards)
<script type="text/javascript">
function ChangeHospital(val) {
window.location.href = "/PatientListByWardDD/TestDropDowns?hospID=" + val;
}
</script>
</div>
在控制器中,存储库()与缓存数据库通信。它传回公共IEnumerable@Html.dropdownlist(“HospModel”,Model.Hospital,new{@onchange=“ChangeHospital(this.value)”})
并且调用控制器刷新病房下拉列表时,我希望保留我在医院下拉列表中选择的值。我试过几种不同的方法,但我承认,我有点卡住了。我发现的大多数示例都是针对强类型的
正如我所提到的,我是MVC新手,但是对于如何解决这个问题的任何建议,或者关于改进我的代码的建议,我都非常感谢。所以我不确定医院的属性是什么,但我会假设每个属性都有一个唯一的ID。 此外,要将发布的数据绑定到视图模型,您需要在视图中使用表单。要创建下拉列表,请使用
DropDownListFor
-Helper。这样,数据将在提交表单后绑定回您的模型
所以你的观点可能是这样的
@model testContingency.Models.ListByWardDD
@{
ViewBag.Title = "TestDropDowns";
}
<h2>TestDropDowns</h2>
<div>
@using (Html.BeginForm("TestDropDowns", "YourController", FormMethod.Post))
{
@Html.DropDownListFor(x => x.HospitalID, Model.Hospital)
@Html.DropDownListFor(x => x.WardID, Model.Wards)
<input type="submit" value="send" />
}
</div>
发布表单后(为了简单起见,我添加了一个按钮来发送表单,并忽略了javascript部分),将调用控制器的方法TestDropDowns(您需要填写BeginForm助手)。该方法需要一个ListByWardDD类型的对象作为参数,框架将自动为您填充值
[HttpPost]
public ActionResult TestDropDowns(ListByWardDD viewModel) {
// your code here, viewModel.HospitalID should contain the selected value
}
注意:提交表单后,属性医院
和病房
将为空。如果需要再次显示表单,则需要重新填充这些属性。否则,您的下拉列表为空
我尽力发布有效代码,但没有编译或测试。非常感谢您的反馈。我会采纳你的建议,使用ListFor和Lambda。但我真的需要知道如何在回发后重新加载医院列表中的选定值。如果我能帮忙的话,我真的不想使用javascript和Ajax。但我开始认为这是不可避免的,除非有人提出其他建议?
public class ListByWardDD {
public int HostpitalID { get;set; }
// the value of the SelectListItem-objects should be the hospital ID
public IEnumerable<SelectListItem> Hospital { get;set; }
public int WardID { get;set; }
// the value of the SelectListItem-objects should be the ward ID
public IEnumerable<SelectListItem> Wards { get;set; }
}
[HttpPost]
public ActionResult TestDropDowns(ListByWardDD viewModel) {
// your code here, viewModel.HospitalID should contain the selected value
}