2013-04-12 23 views
0

前提:我是新的MVC,我的英文不完美,我希望你能理解我的文章,否則我在這裏是爲了解釋。JSON函數 - 層疊DropDownList - 更新模型

我工作在ASP.Net MVC另一個開發人員創建了一個項目,我有這樣的問題:

在視圖中,我有兩個級聯的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視圖,實體框架映射,這是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上更改分銷商,在這種情況下,第二個DropDownList(供應商)獲得正確的價值,但是如果我選擇供應商,然後保存模型,那麼屬性VendorCode仍具有第一個值。

我也試圖創建一個函數來測試事件賣方的「變化」的DropDownList ...

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

...而實際上事件觸發正確只有當我不改變經銷商和供應商項目不會重新加載,在這種情況下,事件僅在第一次觸發。

聽起來就像是第二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

好吧,對不起,這是一個非常微不足道的問題。該代碼是正確的,只是一個領域是錯誤的:在VendorNumber的地方 VENDORCODE ... :-)

有時你看不到最簡單的辦法......

我不刪除因爲代碼是正確的,可能對其他人有用。

問候!

Pileggi