2011-05-27 66 views
1

背景故事:要指定一个jqGrid的正确的路线,我表明我的ASP.NET MVC 3页上,我做了什么,像这样:如何在创建Url.Action调用时引用局部变量?

$('#jqgFlavors').jqGrid({ 
    url: '@Url.Action("FlavorData", "IceCream")', 
etc... 

,这将产生正确的路线在本地运行的时候Visual Studio中(这里的东西住在像"http://localhost:90125/IceCream"或部署的站点里的东西住在像"http://thehostsite/mydeployedsitename/IceCream"上。

大。现在我遇到的问题是,我使用onSelectRow在网格中做了主/详细信息基于所选行的风味标识值。首先,我尝试这样做以获取正确的路由:

onSelectRow: function(theRow){ 
    $('#flavorDetails').load('@Url.Action("Details","IceCream", new {id = 42)})'); 
} 

所以,我可以在如在IceCream控制器的Details动作的“id”参数传递的值42。这工作正常,但我不想硬编码值42,而是从网格本身拉出风味ID。所以,我试图引用flavorID,但似乎无法得到正确的语法:

onSelectRow: function(theRow){ 
    var grid = jQuery('#jqgFlavors'); 
    var flavorID = grid.jqGrid('getCell', theRow, 'FlavorID'); 
    $('#flavorDetails').load('@Url.Action("Details","IceCream", new {id = flavorID)})'); 
} 

我敢肯定,你会得到什么我要为这里 - 引用flavorID值我从电网中提取。但我得到的是一个编译错误:

名称'flavorID'在当前上下文中不存在。

我怀疑这很简单。我如何正确引用该变量?

回答

10

你可以使用.load()方法,它允许你将其他参数传递的第二个参数:

var flavorID = grid.jqGrid('getCell', theRow, 'FlavorID'); 
$('#flavorDetails').load('@Url.Action("Details", "IceCream")', { id: flavorID }); 

这可能可能使用以下网址:/IceCream/Details?id=123,而不是因为JavaScript没有你可能想/IceCream/Details/123什么了解你的路线,但为什么要关心?它仍然会正确地映射到控制器动作:

public ActionResult Details(int id) 
{ 
    ... 
} 

但是,如果你真的肛门一下URL,坚持具有第一类型的网址我见过的人做了以下内容:

var flavorID = grid.jqGrid('getCell', theRow, 'FlavorID'); 
var url = '@Url.Action("Details", "IceCream", new { id = "_TOREPLACE_" })'; 
url = url.replace('_TOREPLACE_', flavorID); 
$('#flavorDetails').load(url); 

我个人不会这样做,只是为了备案而提供。

+0

谢谢Darin。很棒。 – itsmatt 2011-05-27 13:04:36

+0

我欣赏额外的信息。 – itsmatt 2011-05-27 13:08:10

相关问题