选择下拉列表时调用post函数在mvc4中更改

时间:2013-04-02 13:47:55

标签: c# asp.net-mvc

我绑定了一个带有一些值的下拉列表,并在选择下拉列表时调用我的帖子操作。看起来像

@Html.DropDownListFor(m => m.DistrictId, Model.DistrictList, "Select", new
       {
           disableValidation = "true",
           onchange = @"
            var form = document.forms[0]; 
            form.action='Index';
            form.submit();"
       })

这适用于调用我的控制器后期操作。但我无法在我的模型DistrictId属性中获得下拉选择值。

我的控制器功能如下所示

[HttpPost]
        public ActionResult Index(HomeModel homeModel)
        {
            AdminController adminController = new AdminController();
            Guid userId = new Guid();
            homeModel.ComplianceModelList = complianceRepository.LoadComplianceModel(userId, homeModel.DistrictId);
            LoadDistrict(homeModel);
            return View(homeModel);
        }

我想在我的homeModel.DistrictId属性中选择下拉区域。

怎么办?

2 个答案:

答案 0 :(得分:2)

像这样更改你的标记

@Html.DropDownListFor(m => m.DistrictId, Model.DistrictList, "Select")

并有一些javascript来处理您的更改事件,以便它将序列化您的表单并使用ajax将其发送到您的操作方法。

$(function(){
  $("#DistrictId").change(function(e){
    var _this=$(this);

    $.post("@Url.Action("Index","Home")",_this.closest("form").serialize(),
                                                             function(response){
          // do something with response.
    });
  });
});

假设您已将jQuery库加载到您的页面。

答案 1 :(得分:1)

现在我得到了解决方案

下面的代码运作良好。

    @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <h2 class="gridTitle">
            Compliance</h2>
        if (User.Identity.IsAuthenticated && User.IsInRole("SuperAdmin"))
        {
        <div class="complianceSubDiv">
            <div class="complianceRightDiv">
                @Html.LabelFor(model => Model.DistrictId)
                @Html.DropDownListFor(m => m.DistrictId, Model.DistrictList, "Select", new
           {
               disableValidation = "true",
               onchange = @"                        
                form.submit();"
           })</div>
        </div>
        }
}