Asp.net mvc 4 选择post后的下拉值

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

我希望能得到一些关于我在发布后的dropdownlist(razor)中保留价值的指导

我有一个简单的页面:

    @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>
在控制器中,存储库()与缓存数据库通信。它传回公共IEnumerableGetHopspitalListItems。它调用在缓存数据库中编写的存储过程(本质上与sql存储过程相同)。这一切都以其自身的粗糙方式运作良好

我遇到的问题是,当我选择dropdownlist
@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
}