2016-01-28 55 views
-1

我需要在我的頁面上有3個下拉列表。他們的工作方式如下:C#MVC不更新Html.DropDownListFor

用戶必須從第一個下拉菜單中選擇看到第二個下拉列表中。第二項和第三項工作是以同樣的方式進行的。

索引方法填充第一下拉列表:

$(function() { 
    $('#clientDropdown').change(function() { 
     var val = $(this).val(); 
     $.ajax({ 
      type: "POST", 
      url: '/Home/GetClientsProjectsDropDown', 
      data: { 'data': val }, 
      success: function (data) { 
      }, 
      error: function (data) { 
      } 
     }); 
    }); 
}); 

哪個轉發到:

[HttpGet] 
    public ActionResult Index() 
    { 
     ViewBag.ClientDropdownList = GetClientsDropDown(); 
     return View(); 
    } 

用戶後從第一個下拉選擇任何項目

 [HttpPost] 
     public ActionResult GetClientsProjectsDropDown(string data) 
     { 
      if (!String.IsNullOrEmpty(data)) 
      { 
       var result = new List<SelectListItem>(); 
       var clientProjects = _clientService.GetClientsProjects(Int32.Parse(data)); 
       foreach (var proj in clientProjects) 
       { 
        var item = new SelectListItem() 
        { 
         Value = proj.ProjectID.ToString(), 
         Text = proj.ProjectName 
        }; 
        result.Add(item); 
       } 
       TempData["ProjectDropdownList"] = result; 
       return RedirectToAction("Index"); 
      } 
      return PartialView(); 
     } 

這裏是指數.cshtml:

<div style="display: inline-flex; text-align: center;"> 
       <div class="dropdown"> 
        @Html.DropDownListFor(m => m.Client, ViewBag.ClientDropdownList as List<SelectListItem>, "Clients", new { @id = "clientDropdown", @class = "form-control" }) 
       </div> 
       <div id="projectDropdown" class="dropdown" style="margin-left: 10px;"> 
        @if (TempData["ProjectDropdownList"] != null) 
        { 
         @Html.DropDownListFor(m => m.Project, TempData["ProjectDropdownList"] as List<SelectListItem>, "Projects", new { @id = "projectDropdown", @class = "form-control" }) 
        } 
        else 
        { 
         @Html.DropDownListFor(m => m.Project, new List<SelectListItem>(), "Projects", new { @id = "projectDropdown", @class = "form-control" }) 
        } 
       </div> 
       <div class="dropdown" style="margin-left: 10px;"> 
        @Html.DropDownListFor(m => m.Task, new List<SelectListItem>(), "Tasks", new { @id = "taskDropdown", @class = "form-control" }) 
       </div> 
      </div> 

爲什麼第二個下拉列表沒有被更新?

+0

如果您的成功函數回調爲空,您如何期望更新下拉菜單?這也不是使「GET」操作成爲「POST」+返回部分視圖而不是原始數據的最佳方法。 –

+0

你能幫我,我現在該怎麼辦? – miechooy

+0

更好地返回Json對象而不是PartialView。然後,您的成功方法將循環返回的數據並構建DDL。 –

回答

1

你的成功回調是空的:

success: function (data) { 
    }, 

的數據參數應該從控制器部分HTML。您應該將此HTML添加到DOM。例如,

success: function (data) { 
     $('#dropdown2Wrapper').add(data); 
    }, 

顯然,你需要創建id爲「dropdown2Wrapper」一個div或更改此參照相應的jQuery選擇。