我想使用ASP.NET MVC和JQuery實現以下效果。是否可以在視圖中的兩個下拉列表之間異步綁定數據?
我有一個顯示國家列表的下拉列表。我想這樣做是爲了當我改變國家的價值時,在它下面出現一個新的下拉列表,顯示其原籍國是特定選定公司的公司列表。問題是我不想太依賴控制器操作,因爲我在模板助手中使用它,這是一個「無頭」視圖。我可以以某種方式綁定它嗎?
我想使用ASP.NET MVC和JQuery實現以下效果。是否可以在視圖中的兩個下拉列表之間異步綁定數據?
我有一個顯示國家列表的下拉列表。我想這樣做是爲了當我改變國家的價值時,在它下面出現一個新的下拉列表,顯示其原籍國是特定選定公司的公司列表。問題是我不想太依賴控制器操作,因爲我在模板助手中使用它,這是一個「無頭」視圖。我可以以某種方式綁定它嗎?
我會建議你創建一個行動,這將返回所有的企業的JSON表示爲選定的國家:
public class CompaniesController: Controller
{
public ActionResult List(string countryId)
{
IEnumerable<Company> companies = Repository.GetCompanies(countryId);
// Let's assume that Company has two properties: Id and Name
return Json(companies);
}
}
然後假設你已經綁定到國家下拉:
<%= Html.DropDownListFor(x => x.Country, Model.Countries) %>
<%= Html.DropDownListFor(x => x.Company, Enumerable.Empty<SelectListItem>()) %>
您可以註冊onchange
事件,當發生此事件時,對Companies
控制器的List
動作執行AJAX調用,並獲取關聯的對比新興工業經濟體:
$(function() {
$('select#Country').change(function() {
var countryId = $(this).val();
$.post('/companies/list', { countryId: countryId }, function(companies) {
var companiesSelect = $('select#Company');
// loop through the companies and fill the dropdown
$(companies).each(function(index, company) {
companiesSelect.append(
'<option value="' + company.Id + '">'
+ company.Name +
'</option>');
});
});
});
});
謝謝,它的工作原理。不過,它給了我一個臨時解決方案的印象。我仍然有點困惑於如何構建泛型,正如Telerik所稱的MVC擴展,因爲之前的用戶控件就是這種情況。如果我開始編寫適用於多種情況的擴展,恐怕代碼可能會變得混亂 – xantrus 2010-03-25 18:30:46
@user:請參閱寫好標題本薈萃討論 - http://meta.stackexchange.com/questions/10647/howto-writing-good-titles – Sampson 2010-03-23 16:42:56