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

时间:2015-08-01 01:26:37

标签: asp.net-mvc durandal durandal-2.0

我在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,返回404页面,因为没有参数传递给MVC操作。

我有什么选择?

1 个答案:

答案 0 :(得分:0)

我知道这个问题现在差不多已经有两年了,但我显然忘了用我的解决方案关闭它。基本上,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操作方法中使用,这样我就可以获得一些数据服务器端,这当然不起作用......