开发者

How do I reference the local variable when creating Url.Action call?

Backstory: To specify the correct route for a jqGrid that I show on my ASP.NET MVC 3 page, I do something like so:

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

and that will produce the correct route either when running locally out of Visual Studio (where things live at something like "http://localhost:90125/IceCream" or on the deployed site where things live at something like "http://thehostsite/mydeployedsitename/IceCream".

Great. Now the issue I'm having is that I use the onSelectRow in the grid to do a master/details thing based on the selected row's flavor id value. First, I tried doing this to just get the route correct:

onSelectRow: function(theRow开发者_如何学编程){
   $('#flavorDetails').load('@Url.Action("Details","IceCream", new {id = 42)})');
}

So that I can pass the value 42 in as the 'id' parameter in the Details action of the IceCream controller. And that works fine, but of course I don't want to hard code the value 42, rather pull the flavor id from the grid itself. So I have tried to reference the flavorID but can't seem to get the syntax correct:

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

I'm sure you get what I'm going for here - referencing the flavorID value I extract from the grid. But what I get is a compilation error:

The name 'flavorID' does not exist in the current context.

I suspect this is really simple. How do I reference correctly that variable?


You could use the second argument of the .load() method which allows you to pass additional parameters:

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

This might probably use the following url: /IceCream/Details?id=123 instead of what you might want /IceCream/Details/123 because javascript doesn't know anything about your routes but why care? It will still map correctly to the controller action:

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

But if you are really anal about urls and insist on having the first type of url I've seen people doing the following:

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

Personally I wouldn't do it but providing it just for the record.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜