2010-05-27 89 views
0

我是MonoRail的新手,想弄清楚如何使用它,以便我可以在下拉列表中選擇父類別,然後顯示第二個下拉列表與父母的子女的類別。MonoRail - 從一個下拉列表中選擇父類別,顯示子類別下拉菜單

如果我使用的是我習慣的ASP.NET MVC,我會有一個javascript函數,它將被稱爲onchange的第一個下拉列表,並且會對控制器方法進行ajax調用(傳入選中父類別id),它將獲取該父類別的所有子類別並以JSON格式返回它們。然後在回調JavaScript函數中,我將評估JSON並使用子類別填充第二個下拉列表。

我該如何使用MonoRail/jQuery來做到這一點?這裏是我到目前爲止的代碼:

$FormHelper.Select("business.category.id", $categories, "%{value='id', text='name', firstoption='Select a Category'}") 

$FormHelper.Select("business.category.id", $childCategories, "%{value='id', text='name', firstoption='Select a Sub-Category'}") 

然後在BusinessController.cs:

private void AddDataToModels() 
     { 
      PropertyBag["categories"] = CategoryRepository.GetParentCategories(); 
      PropertyBag["childCategories"] = CategoryRepository.GetChildCategories(1); 
} 

感謝對如何處理這個任意輸入!

賈斯汀

回答

0
+0

謝謝,我實際上在發佈後看到那篇文章,但他使用.ashx文件做了來自ajax的服務器端調用。我將如何從ajax調用控制器操作?它給了我「MonoRail無法解析模板的視圖引擎實例...」 – Justin 2010-05-28 04:10:13

+0

這是我之前使用單軌鐵路的ajax做的一個快速文章。它使用原型,但同樣的概念也適用於jQuery: http://weblogs.asp.net/psteele/archive/2008/09/15/easy-ajax-with-monorail.aspx – PatrickSteele 2010-05-28 12:40:52

+0

此方法wasn'對我的情況很有幫助,因爲它基本上可以返回一個完整的視圖,這讓我想起了ASP.NET的更新面板。我正在尋找一種方法來返回JSON並處理該問題,而不是整個視圖。不過,我給你的答案,因爲你讓我在正確的軌道上,是唯一的迴應,感謝您的幫助! – Justin 2010-05-28 14:39:44

0

這裏的其他人誰正在尋找調用從jQuery的控制器行動,重新回到JSON答案...

控制器方法:

[return: JSONReturnBinder(Properties = "Id,Name")] 
     public BusinessType[] GetChildBusinessTypes(int parentId) 
     { 
      var businessTypes = BusinessTypeRepository.GetChildBusinessTypes(parentId); 
      return businessTypes; 
     } 

J avascript:

$(document).ready(function() { 
     $('#business_parentbusinesstype_id').change(function() { 
      jQuery.ajax({ 
       url: "$UrlHelper.For("%{action='$business.site.id/GetChildBusinessTypes'}")", 
       data: { parentId: $('#business_parentbusinesstype_id').val() }, 
       dataType: 'json', 
       type: 'GET', 
       success: fillChildBusinessTypes, 
       error: ajaxError 
      }); 
     }); 
    }); 

    function fillChildBusinessTypes(json) { 
     //get business types. 
     var businessTypes = eval(json); 
     //bind business types to dropdown. 
     $("#business_businesstype_id").get(0).options.length = 0; 
     $("#business_businesstype_id").get(0).options[0] = new Option("Select a Business Type", "0"); 
     jQuery.each(businessTypes, function(index, item) { 
      $('#business_businesstype_id').get(0).options[$("#business_businesstype_id").get(0).options.length] = new Option(item.Name, item.Id); 
     }); 
     //show child dropdown. 
     Show($('#spnChildBusinessTypes')); 
    } 
相關問題