Asp.net mvc 4 具有Knockoutjs模板项属性的RouteLink

Asp.net mvc 4 具有Knockoutjs模板项属性的RouteLink,asp.net-mvc-4,knockout.js,Asp.net Mvc 4,Knockout.js,我有一个模板通过foreach:viewModel.foos呈现另一个模板。在这个模板上,我想做如下操作:@Html.RouteLink(“视图”,“Foo”,new{id=fooId,text=fooName})。作为视图模型的fooId和fooName属性。这并不能回答这个问题,但我将把它保留在这里,因为它显示了如何为更像SPA的方法实现它。 如果您希望将导航移动到客户端,请查看Durandal或我的轻型SPA引擎 问题更新前的旧答案 您必须从模型中执行此操作(这是一件好事,因为不应在视图

我有一个模板通过
foreach:viewModel.foos
呈现另一个模板。在这个模板上,我想做如下操作:
@Html.RouteLink(“视图”,“Foo”,new{id=fooId,text=fooName})
。作为视图模型的
fooId
fooName
属性。

这并不能回答这个问题,但我将把它保留在这里,因为它显示了如何为更像SPA的方法实现它。

如果您希望将导航移动到客户端,请查看Durandal或我的轻型SPA引擎

问题更新前的旧答案

您必须从模型中执行此操作(这是一件好事,因为不应在视图中执行此操作)

让子视图模型将参数作为构造函数参数

MyViewModel = function() {
   this.subView = ko.observable();
};

MyViewModel.prototype = {
   loadSubView: function() {
      this.subView(new SubViewModel(this.params));
   }
};
编辑:提示测试此库的模板设置

我已将此添加到我的模板中:

<a data-bind="attr: { href: Url }">View</a>
缺点:

  • 痛苦的可伸缩性
优点:

  • 简单

这个子视图如何回答这个问题?OP希望将服务器端razor代码
@Html.RouteLink
与客户端KO视图模型属性相结合,那么您的答案是如何解决这一问题的呢?他想要一个淘汰的等价物,如果不是,问题需要更清楚这个答案很有趣@Anders,但Esteban如何使用本质上是动态的URL?我认为KO中有类似于
computed
的东西。他能用这个吗?也许你可以改变你的答案,并反思一下,以获得更好的答案。这样做行不通,记住KO用于客户端绑定,RouteLink是在服务器端运行的html助手。一件好事,如果不是最好的,你可以做的是将url分配给一个js变量,然后使用分配给vaiable.+1的url在KO中构建并绑定你的链接(标签),让我意识到我需要咖啡。我想我明白了,我会用原始的、不友好的、
临时的解决方案更新我的问题。如果你的编辑解决了你的问题,那么你应该做出回答并接受它(当然,几天后)。通过这种方式,其他人可以看到它是如何解决您的问题的,并且在将来可能会帮助他们。如果您问我,将导航移到客户端是最好的方法,KO、durandal有很多SPA引擎etc@vonv. 这是我的意图编辑这作为一个临时修复,如果我不能得到一个更好的方法,我会在几天内编辑作为一个答案,所以它可能会帮助其他人。
public class Foo : FooBase {
    public long FooId { get; set; }
    public string FooName { get; set; }

    public string Url {
        get {
            return string.Format("/foo/{0}/{1}", FooId, FooName
        }
    }
}