0

前提:我是MVC的新手,我的英语不是很完美,希望你能理解我的帖子,否则我是来解释的。

我正在开发由 ASP.Net MVC 中的另一个开发人员创建的项目,但我遇到了这个问题:

在一个视图中,我有两个级联的 DropDownList:一个是 Distributors,另一个是在第一个 DropDownList 中选择的 Distributor 的 Vendors。

这是代码:


在身体里:

<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 视图,与实体框架映射,这是 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

一切似乎都运行良好,但是当我保存视图时,有时 ClientInfo 类的 VendorCode 属性没有最后选择的值。如果我更改第一个 DropDownList 上的 Distributor 会发生这种情况,在这种情况下,第二个 DropDownList(供应商)获得正确的值,但如果我选择一个供应商然后保存模型,则属性 VendorCode 仍然具有第一个值。

我还尝试创建一个函数来测试 Vendors DropDownList 的事件“更改”...

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

...事实上,只有当我不更改分销商并且未重新加载供应商项目时,事件才会正确触发,在这种情况下,事件只会在第一次触发。

听起来像是第二个 DropDownList Vendors 的刷新问题,但我找不到解决方案...

皮莱吉

4

2 回答 2

1

我在这里写了一篇关于这个的博客文章。这是与您的情况类似的相关代码。

$("#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();
于 2013-04-12T14:30:16.057 回答
0

好的,对不起,这是一个非常微不足道的问题。代码是正确的,只是一个字段是错误的: VendorCode 代替了 VendorNumber ... :-)

有时您看不到最简单的解决方案...

我不会删除帖子,因为代码是正确的,并且可能对其他人有用。

问候!

皮莱吉

于 2013-04-12T14:33:16.253 回答