2013-04-12 2 views
0

Помещение: Я новичок в MVC, и мой английский не идеален, надеюсь, вы поймете мое сообщение, иначе я здесь для объяснений.Функция JSON - каскадирование DropDownList - обновите модель

Я работаю над проектом, созданным другим разработчиком в ASP.Net MVC, и у меня есть эта проблема:

В View У меня есть два каскадных DropDownList: один с дистрибьюторами, а другие с вендорами Дистрибьютор выбран в первом DropDownList.

Это код:


В теле есть:

<tr> 
    <td> 
     <span>Distributor</span> 
    </td> 
    <td> 
     @Html.DropDownList("DistributorID") 
     @Html.ValidationMessageFor(model => model.DistributorID) 
    </td> 
</tr> 
<tr> 
    <td> 
     <span>Vendor</span> 
    </td> 
    <td class="tdAlignLeft"> 
     @Html.DropDownList("VendorCode") 
     @Html.ValidationMessageFor(model => model.ClientHeaderInformation.VendorCode) 
    </td> 
</tr> 

В скрипте:

$("#DistributorID").change(function (e) { 

    var SelectGroupId =$(this).val(); 

    $.getJSON('@Url.Action("VendorByDistributor", "ClientInfo")', { VendorGroup: DistributorID }, function (param) { 
     var vendorCodes = $('#VendorCode'); 
     vendorCodes.empty(); 
     $.each(param, function (index, param) { 
      vendorCodes.append(
      $('<option/>') 
       .attr('value', param.vendorCode) 
       .text(param.vendorName) 
     ); 
     }); 
    }); 
}); 

В Контроллер:

public ActionResult VendorByDistributor(int _DistributorID) 
{ 
    var Vendors = db.View_Vendors.Where(n => n.DistributorID.Equals(_DistributorID)).Select(
     x => new 
     { 
      vendorCode = x.VendorCode, 
      vendorName = x.VendorName 
     }); 
    return Json(Vendors, JsonRequestBehavior.AllowGet); 
} 

'View_Vendors' представляет собой вид SQL Server, сопоставляются с Entity Framework, это SQL:

SELECT A.DistributorID, A.DistributorName, B.VendorName, B.VendorCode 
FROM dbo.Distributors AS A LEFT OUTER JOIN dbo.Vendors AS B ON 
A.VendorCode = dbo.Vendor.VendorCode 

Все кажется, работает хорошо, но когда Я сохраняю представление, иногда свойство VendorCode класса ClientInfo не имеет последнего выбранного значения. Это происходит, если я изменил Дистрибьютор на первом DropDownList, в этом случае второй DropDownList (Vendors) получит правильные значения, но если я выберу Поставщика, а затем сохраню модель, свойство VendorCode останется первым.

Я также пытался создать функцию, чтобы проверить событие «изменение» из Поставщиков DropDownList ...

$ ("# VendorCode.") Change (function (e) { 
    SelectId var = $ (this). val(); 
    $. getJSON ('@ Url.Action ("updateVendorCode", "ClientInfo")', {VendorCodePass: SelectId}); 
    }); 

... и на самом деле срабатывает событие только правильно, если я не изменить распространителя и элементы Vendor не перезагружаются, в этом случае событие срабатывает только в первый раз.

Похоже, проблема обновления второго DropDownList вендоров, но я не могу найти решение ...

Pileggi

+0

Извините, текст был дублирован, теперь я его обрезал. – lamarmora

ответ

1

я написал в блоге об этом here. Вот соответствующий код, похожий на ваш случай.

$("#ClientId").change(function() { 
    var clientId = ""; 
    $("#ClientId option:selected").each(function() { 
     clientId += $(this)[0].value; 
    }); 
    var url = '<%:Url.Action("ProjectList", "Client") %>' + "/" + clientId; 
    $.getJSON(url, null, function (data) { 
     var selectedValue = '<%:Model.ProjectId %>'; 
     $("#ProjectId").empty(); 
     $.each(data, function (index, optionData) { 
      if (optionData.OBJID == parseInt(selectedValue)) 
       $("#ProjectId").append("<option value='" + optionData.ObjId+ "' selected='true'>" + optionData.Name + "</option>"); 
      else 
       $("#ProjectId").append("<option value='" + optionData.ObjId + "'>" + optionData.Name + "</option>"); 
     }); 
    }); 
}).change(); 
0

ОК, извините, это была очень пустяковая проблема. Код правильно, просто поле было неправильно: VendorCode в месте VendorNumber ... :-)

Иногда вы не можете увидеть простое решение ...

Я не удалить потому что код правильный, и он может быть полезен для других.

С уважением!

Pileggi