2

我正在制作一个全球化的asp.net mvc解决方案。如何在MVC3中使用视图全球化的级联下拉列表

我已经实现了全球化使用资源文件(Resources.fr.resx & Resources.nl.resx)和

routes.MapRoute(
        "Default", 
        "{language}/{controller}/{action}/{id}", 
        new { language="Nl", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
        new { language ="Nl|Fr" } 
       ); 

现在我要让2个级联dropdownlists,像这样的东西:

$('#ddl_Author').change(function() { 
    var ddlsource = "#ddl_Author"; 
    var ddltarget = "#ddl_Books"; 

    $.getJSON('@Url.Action("Books")', { authorId: $(ddlsource).val() }, function (data) { 
       $(ddltarget).empty(); 
       $.each(data, function (index, optionData) { 
        $(ddltarget).append("<option value='" + optionData.Value + "'>" + optionData.Text + "</option>"); 
       }); 
      }); 
}); 

我的问题是我有什么作为URL中使用“@ Url.Action(‘书’)”似乎并没有工作...

这是我的控制器:

public ActionResult Books(int authorId) 
{ 
    var books = _bookService.GetBooks(authorId); 
    ... 
    return Json(books.ToList(), JsonRequestBehavior.AllowGet); 
} 

回答

3

你需要指定的语言,因为它是不是在你的路线可选参数:

@Url.Action("Books", new { language = "Fr" }) 
+0

问题是我想让程序使用当前正在使用的语言。 这似乎工作: window.location +“/ Books” 但我不总是工作.. @ – Velter 2011-03-15 11:08:21

+1

@Velter,你可以从当前路线抓住它:'@ Url.Action(“Books”,new {language = ViewContext.RouteData.GetRequiredString(“language”)})'。不要使用带'window.location'和javascript的字符串连接来生成url,它可能不适用于所有情况。 – 2011-03-15 11:13:28

0

@Darin季米特洛夫

若本方法比使用XMLDataSource完成 下拉菜单的本地化更受欢迎?