【问题标题】:How do I reference the local variable when creating Url.Action call?创建 Url.Action 调用时如何引用局部变量?
【发布时间】:2011-05-27 12:57:02
【问题描述】:

背景故事:要为我在 ASP.NET MVC 3 页面上显示的 jqGrid 指定正确的路由,我会这样做:

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

这将产生正确的路线,无论是在 Visual Studio 的本地运行(其中事物位于 "http://localhost:90125/IceCream" 之类的位置,或者在事物位于 "http://thehostsite/mydeployedsitename/IceCream" 之类的位置的已部署站点上)。

太好了。现在我遇到的问题是我使用网格中的onSelectRow 根据所选行的风味 id 值来执行主/详细信息。首先,我尝试这样做只是为了让路线正确:

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

这样我就可以在IceCream 控制器的Details 操作中将值42 作为'id' 参数传递。这很好用,但我当然不想硬编码值 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”在当前上下文中不存在。

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

【问题讨论】:

    标签: javascript asp.net-mvc asp.net-mvc-3 jqgrid


    【解决方案1】:

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

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

    这可能会使用以下网址:/IceCream/Details?id=123 而不是您可能想要的 /IceCream/Details/123,因为 javascript 对您的路线一无所知,但为什么要关心呢?它仍然会正确映射到控制器操作:

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

    但是,如果您真的对 url 不感兴趣并坚持使用第一种类型的 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); 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多