URL-адреса T4MVC в javascript: подставьте значения маршрута

Мне нравится использовать T4MVC и его строго типизированные URL-адреса, и я хочу использовать их в JS, но у меня есть некоторые проблемы. Допустим, я хочу загрузить URL-адрес в div:

$('#mydiv').load("@Url.Action(MVC.Home.Index())");  //that works

Но что, если мое действие параметризовано некоторым значением js-атрибута?

public ActionResult Index2(int id){}

var id = $('#mydiv').attr('index');
$('#mydiv').load("@Url.Action(MVC.Home.Index2(id))");  //this certainly doesn't work, since "id" is a JS variable
$('#mydiv').load("@Url.Action(MVC.Home.Index2(-1))".replace("-1", id));  //this is a workaround I use now, but don't like it :)

Однако, если мой параметр не int, а Guid, обходной путь становится уродливым, потому что значение guid по умолчанию слишком длинное.

Каковы другие решения? Спасибо


person Shaddix    schedule 26.10.2011    source источник


Ответы (1)


Общий подход может быть в порядке. Для случая guid вы можете изменить:

@Url.Action(MVC.Home.Index2(-1))

to

@Url.Action(MVC.Home.Index2().AddRouteValue("id", -1))

Таким образом вы обойдете систему типов и сможете передать любое фиктивное значение, которое захотите.

person David Ebbo    schedule 26.10.2011
comment
спасибо, это хороший способ, но если изменить имена параметров, он просто перестанет работать. - person Shaddix; 26.10.2011
comment
Да, вы потеряете эту небольшую часть стоимости T4MVC. Хотя не уверен, что у тебя получится лучше. При полном использовании T4MVC (как в первой строке) он будет применять тип параметра, а вы явно пытаетесь использовать неправильный тип :) - person David Ebbo; 26.10.2011