использование T4MVC в функции JS

Возьмите следующий скрипт. Обратите внимание на строку «/Home/Index». Используя T4MVC, есть ли способ указать это, чтобы избавиться от волшебной строки?

<script type="text/javascript">
    $(document).ready(function () {
        $dialog = $('#dialog');
        $dialog.dialog({
            autoOpen: false,
            buttons: { },
            open: function(event, ui) {
                $(this).load("/Home/Index");
           }
        });
    });
</script>

person John Livermore    schedule 18.10.2011    source источник


Ответы (3)


Это если ваше представление использует Razor

@Url.Action(MVC.Home.Index())

Таким образом, ваш сценарий будет

<script type="text/javascript">
        $(document).ready(function () {
            $dialog = $('#dialog');
            $dialog.dialog({
                autoOpen: false,
                buttons: {},
                open: function (event, ui) {
                    $(this).load("@Url.Action(MVC.Home.Index())");
                }
            });
        });
</script>
person Stephen    schedule 18.10.2011

Если ваш скрипт находится в отдельном файле .js (не в представлении Razor), вы можете использовать T4MvcJS для справиться с этим делом.

Это будет выглядеть почти так же, как на примере Скулда:

$(this).load(MvcActions.Home.Index());

но это будет чистый Javascript.

(T4MvcJs сгенерирует js-хелпер — очень похоже на T4MVC)

person Shaddix    schedule 05.02.2012
comment
Хм, похоже, это еще один пакет nuget, с которым мне нужно поиграть. - person Stephen; 12.09.2012

сделать что-то вроде

$(this).load('<%:Url.Action("index","home") %>');
person Muhammad Adeel Zahid    schedule 18.10.2011
comment
Это не использование T4MVC, это просто обычный способ. - person Stephen; 18.10.2011
comment
я полагаю, что запрос пройдет процесс маршрутизации, прежде чем он найдет свою цель, а маршрутизация отвечает за создание URL-адреса. - person Muhammad Adeel Zahid; 18.10.2011
comment
Это будет, но проблема в том, что Url.Action(string, string) не является T4MVC и является обычным способом MVC. T4MVC частично заменяет «магические строки» закодированными значениями, поэтому при переименовании контроллера/действия вы получаете ошибку времени компиляции, а не ошибку времени выполнения. Документация объясняет это лучше всего mvccontrib.codeplex.com/ - person Stephen; 18.10.2011