2015-10-13 51 views
1

我想在mvc中使用级联下拉列表。一些它如何工作,但有一些问题。实际上当第一个视图呈现我有一个下拉帐户类型的基础上,这个下拉我必须填充组下拉。但是当第一个下拉菜单被渲染时,它必须选择房地产经纪人和赞助商,默认情况下,房地产经纪人是第一个选择的选项,然后所有与它相关的团队被渲染。但无法在第一时间获得价值。什么是任何人都可以建议我的问题。级联下拉不起作用

这里是我的代码

public class ViewModel 
{ 
[Required] 
     public SelectList AccountType { get; set; } 
     public string SelectedAccountType { get; set; } 
     public IEnumerable<SelectListItem> Group { get; set; } 
     public string SelectedGroup { get; set; } 
} 


[HttpGet] 
     public ActionResult Index(ViewModel viewModel) 
     { 



      List<SelectListItem> groups = sDbContext.Groups 
        .Where(o => o.GroupId > 1 && o.Deleted == false && o.AccountSubId == 1).OrderBy(uu => uu.GroupName) 
        .Select(o => new SelectListItem() 
        { 
         Value = o.GroupId.ToString(), 
         Text = o.GroupName 
        }).ToList(); 
      groups.Insert(0, new SelectListItem() { Value = "0", Text = "All" }); 
      viewModel.Group = groups; 
      viewModel.AccountType = new SelectList(sDbContext.AccountTypes.Where(o => o.AccountTypeId != 0), "AccountTypeId", "AccountName");       
      reportService.GetReportsListGrid(); 
      return View(viewModel);   
    } 

观点:

@model App1.ViewModels.ViewModel 
@{ 
    List<SelectListItem> list = new List<SelectListItem>(); 
} 
@using (Html.BeginForm("Index", "routee", FormMethod.Post, new { @id = "appForm" })) 
{ 
Account Type 
           @Html.DropDownListFor(m => m.SelectedAccountType, (IEnumerable<SelectListItem>)Model.AccountType, new { @class = "form-control" }) 
@Html.DropDownListFor(model => model.SelectedGroup, list, new { @class = "form-control" }) 
           @Html.ValidationMessageFor(model => model.SelectedGroup) 

} 

,这里是我的脚本..

<script type="text/javascript"> 
$('#SelectedAccountType').change(function() { 
     OnAccountTypeChange(); 
    }); 

    function OnAccountTypeChange() { 
     var id = $("#SelectedAccountType :selected").val(); 
     var groupId = $('#SelectedGroup').val(); 
     if (id != "") { 
      alert(id); 
      $.ajax({ 
       type: "GET", 
       contentType: "application/json; charset=utf-8", 
       url: '@Url.Action("GetGroupsByAccountSubTypeId", "Common", new { area = "" })', 
       data: { "AccountSubId": id }, 
       dataType: "json", 
       beforeSend: function() { 
        //alert(id); 
       }, 
       success: function (data) { 
        var items = "<option value='0' selected='selected'>-All-</option>"; 
        $.each(data, function (i, groups) { 
         items += "<option value='" + groups.Value + "'>" + groups.Text + "</option>"; 
        }); 
        $('#SelectedGroup').html(items); 
        if (groupId != undefined || groupId != null || groupId != "") 
         $('#SelectedGroup').val(groupId); 
       }, 
       error: function (result) { 
        console.log('Service call failed: ' + result.status + ' Type :' + result.statusText); 
       }, 
       complete: function() { 
        $('#SelectedGroup').prop('disabled', false); 
       } 
      }); 
     } 
     else { 
      $('#SelectedGroup').html(items); 
     } 
    } 
</script> 
+0

这可能会有帮助:http://stackoverflow.com/questions/22952196/cascading-dropdown-lists-in- ASP-净-MVC-5/30945495#30945495 –

回答

1

只是一个简单的错误。你为什么要使用列表在这里

@Html.DropDownListFor(model => model.SelectedGroup, list, new { @class = "form-control" }) 

你的代码应该是这样的:

@Html.DropDownListFor(model => model.SelectedGroup, (IEnumerable<SelectListItem>)Model.Group, new { @class = "form-control" })