Mvc和淘汰:点击数据绑定不会重定向到另一个操作

时间:2014-09-01 19:20:29

标签: asp.net-mvc-4 knockout.js

我希望在带有MyAction链接的href标签的foreach循环列表中。

在foreach循环(knockout)中的Edit.cshtml (http://localhost/mysite/Order/Edit/4)中,每个项目都有一个href:

<a href="#" data-bind="click: $parent.EditForStore">Eddit</a>

方法在ViewModel.js中实现:

self.EditForStore  = function (item) {
        console.log(item.IdStore());
        var idStore = item.IdStore();

        //var urlMeta = '@Url.Action("MyAction", "MyController", new { pStoreId = ' + idStore.toString() + ' })';

        var urlMeta = '@Url.Action("MyAction", "MyController", new { pStoreId = 4 })';

        //var myURL = '@Url.Action("MyAction", "MyController")';
        window.location.href = urlMeta;
    };

我无法重定向到MyAction。 当我设置location.href时,它会重定向到http地址:

http://localhost/mysite/Order/Edit/4/MyAction/MyController?pStoreId=4

我无法更改location.href,我只将文字附加到我当前的地址。

1 个答案:

答案 0 :(得分:0)

我用于将服务器端路由引入淘汰赛的技术是生成具有已知参数值的路由并将其存储为数据属性。然后敲除然后将数据值推入href。

您可以利用$ element上下文变量将当前元素提供到foreach绑定中父viewModel上声明的函数中,使用attr绑定来更新href属性。

例如......


<强> HTML

<div data-bind="foreach: stores">
    <a href="#" data-url='@Url.Action("MyAction", "MyController", new { pStoreId = 0 }' data-bind="attr: { 'href' :  $parent.buildUrl($element, id) }, text: id"></a>
</div>

<强>的Javascript

var ViewModel = (function() {
    var ctor = function ViewModel() {
        this.stores = ko.observableArray( [{ id: 1 }, {id:2}, {id:3}, {id:4} ]);
    };

    ctor.prototype.buildUrl = function(element, data) {
        return element.getAttribute('data-url').replace('pStoreId=0', 'pStoreId=' + data);
    };
    return ctor;
})();

ko.applyBindings( new ViewModel() );

请参阅http://jsfiddle.net/9Lz4493d/获取示例(没有razor语法和硬编码的data-url属性,但您明白了。)

可以轻松增强“网址构建器”功能,以提供参数名称等。