2010-05-27 59 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')); 
    }