2015-08-01 3 views
1

У меня проблема с использованием параметров в Дюрандала для приложения ASP.NET MVC ...Durandal не передаются параметры MVC контроллер действий

Я использую MVC маршрута Атрибуты, например: [Route("admin/pages")] , [Route("admin/blog")] и т.д ..

И интегрировать Дюрандаль следующим образом:

main.js:

app.start().then(function() { 
    viewEngine.viewExtension = '/'; 

    viewLocator.convertModuleIdToViewId = function (moduleId) { 
     return moduleId.replace('viewmodels', ''); 
    }; 

    app.setRoot('viewmodels/admin/shell', 'entrance'); 
}); 

Это прекрасно работает, как viewId заканчивается соответствие маршрута MVC.

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

[Route("admin/localization/localizable-strings/{languageId}")]

и мой Дюрандаль маршрут для этого:

localization/localizable-strings/:languageId

Пример якорный тег:

<a href="/admin/#localization/localizable-strings/1" class="btn btn-primary btn-xs">Localize</a>

Это не работает, так как кажется Durandal не передает этот параметр на сервер. Он просто извлекает HTML из /admin/localization/localizable-strings, который возвращает страницу 404, потому что никакой параметр не был передан в действие MVC.

Какие у меня варианты?

+0

Используете ли вы ответы MVC как ваш вид Durandal? i.e ViewResult из действия контроллера - это html-представление для вашей модели просмотра Durandal. –

+0

@MarvinRounce, да, я. – Matt

+0

Durandal и SPA в целом говорят о том, чтобы поставить логику и обработку на клиента, а не на сервер. Это одна из основных причин для перехода на архитектуру SPA в первую очередь. Используя MVC и Durandal, у вас есть два этапа обработки, что предполагает, что может возникнуть проблема с вашей общей архитектурой и/или причинами использования Durandal. Во всяком случае, если вы действительно хотите это сделать, вам нужно будет реализовать пользовательский viewEngine.js. Если вы справитесь с этим, было бы интересно увидеть код. –

ответ

0

Я знаю, что этот вопрос сейчас почти 2 года, но я, очевидно, забыл закрыть его с моим решением в то время. В принципе, Бретт и Марвин были верны, но с тех пор, как я был таким новым для Дюрандала (и в целом в ООПТ), я неправильно понял, что они говорили мне. Я закончил это:

self.cultureCode = null; 

self.activate = function (cultureCode) { 
    self.cultureCode = cultureCode; 

    if (!self.cultureCode) { 
     self.cultureCode = null; 
    } 
}; 

И маршрут дюрандаля был установлен следующим образом;

"localization/localizable-strings/:cultureCode" 

Я бы использовал этот параметр для получения соответствующих данных через ajax. Моя ошибка заключалась в том, что параметр мог быть использован в методе действия MVC, чтобы я мог получить некоторую часть сервера данных, которая, конечно же, не работает ...

Смежные вопросы