Как мне обратиться к локальной переменной при создании вызова Url.Action? - PullRequest
1 голос
/ 27 мая 2011

Предыстория: чтобы указать правильный маршрут для jqGrid, который я показываю на моей странице ASP.NET MVC 3, я делаю что-то вроде этого:

$('#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)})');
}

, чтобы я мог передатьзначение 42 в качестве параметра 'id' в действии Details контроллера IceCream. И это прекрасно работает, но, конечно, я не хочу жестко кодировать значение 42, скорее извлеките идентификатор аромата из сеткиТаким образом, я попытался сослаться на flavourID, но, похоже, не смог получить правильный синтаксис:

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

Я уверен, что вы получите то, что я собираюсь здесь - ссылаясь на значение flavid, которое я извлекаюиз сетки.Но я получаю ошибку компиляции:

В текущем контексте не существует имени "flavourID".

Я подозреваю, что это действительно просто.Как правильно ссылаться на эту переменную?

1 Ответ

10 голосов
/ 27 мая 2011

Вы можете использовать второй аргумент метода .load(), который позволяет передавать дополнительные параметры:

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

Возможно, вместо этого может использоваться следующий URL: /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); 

Лично я бы не стал этого делать, но предоставил бы это только для записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...