0

前提: 私は MVC を初めて使用し、私の英語は完璧ではありません。私の投稿を理解していただければ幸いです。それ以外の場合は、説明のためにここにいます。

ASP.Net MVC で別の開発者によって作成されたプロジェクトに取り組んでおり、次の問題があります。

ビューには、2 つのカスケード DropDownList があります。1 つはディストリビューターで、もう 1 つは最初の 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」は、Entity Framework にマップされた 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 を変更した場合に発生します。この場合、2 番目の DropDownList (Vendors) は正しい値を取得しますが、Vendor を選択してモデルを保存すると、プロパティ VendorCode は最初の値のままです。

また、Vendors DropDownList のイベント「変更」をテストする関数を作成しようとしました...

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

...そして実際、ディストリビューターを変更せず、ベンダーアイテムがリロードされていない場合にのみ、イベントが正しく発生します。その場合、イベントは最初にのみ発生します。

2 番目の DropDownList ベンダーの更新の問題のように聞こえますが、解決策が見つかりません...

ピレッジ

4

2 に答える 2