Durandal 没有将参数传递给 MVC 控制器操作

Durandal not passing parameters to MVC controller action

我在 Durandal 中为 ASP.NET MVC 应用程序使用参数时遇到问题...

我使用 MVC 路由属性,例如: [Route("admin/pages")][Route("admin/blog")] 等..

我整合Durandal如下:

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}")]

我的 Durandal 路线 是:

localization/localizable-strings/:languageId

锚标记示例:

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

这不起作用,因为 Durandal 似乎没有将参数传递给服务器。它只是从 /admin/localization/localizable-strings 检索 HTML,其中 returns 一个 404 页面,因为没有参数传递给 MVC 操作。

我有哪些选择?

我知道这个问题已经有将近 2 年的历史了,但显然我当时忘记了用我的解决方案关闭它。基本上,Brett 和 Marvin 是正确的,但由于当时我对 Durandal(以及一般的 SPA)还很陌生,所以我完全误解了他们告诉我的内容。我最终这样做了:

self.cultureCode = null;

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

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

并且durandal路线设置如下;

"localization/localizable-strings/:cultureCode"

然后我会使用该参数通过 ajax 获取相关数据。我的错误是希望参数能够在 MVC 操作方法中使用,以便我可以获得一些数据服务器端,这当然行不通...