У меня проблема с использованием параметров в Дюрандала для приложения 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.
Какие у меня варианты?
Используете ли вы ответы MVC как ваш вид Durandal? i.e ViewResult из действия контроллера - это html-представление для вашей модели просмотра Durandal. –
@MarvinRounce, да, я. – Matt
Durandal и SPA в целом говорят о том, чтобы поставить логику и обработку на клиента, а не на сервер. Это одна из основных причин для перехода на архитектуру SPA в первую очередь. Используя MVC и Durandal, у вас есть два этапа обработки, что предполагает, что может возникнуть проблема с вашей общей архитектурой и/или причинами использования Durandal. Во всяком случае, если вы действительно хотите это сделать, вам нужно будет реализовать пользовательский viewEngine.js. Если вы справитесь с этим, было бы интересно увидеть код. –