使用剃刀设置knockout viewmodel的初始值

时间:2011-11-07 15:39:03

标签: asp.net-mvc-3 razor knockout.js

我发现奇怪的是我无法找到有关如何动态填充Knockout视图模型的任何信息。我想我的搜索字词是不正确的。

无论如何,因为我正在使用Asp.Net MVC 3并且我第一次使用基于某个特定页面的淘汰赛,我希望我能以某种方式使用Razor模型插入淘汰赛。

@Html.TextBoxFor(m => m.PropertyName, new { data_bind = "value: name" })

我认为这不起作用,因为即使剃刀使用PropertyName填充字段,它也会在绑定之前发生,因此它不会强制它对knockout viewmodel的值。

        var viewModel = {
        name: ko.observable(@GetPoertyNameUsingRazorSomehow)
    };

这也不起作用,至少我不明白。

由于我们可以轻松地使用MVC 3获取RazorModel数据,我确信我们可以将它注入Knockout viewModel。我还没有看到任何解释如何的教程。我错过了什么?

2 个答案:

答案 0 :(得分:4)

我在Json.NET上创建了一个小型库,仅供参考:

https://github.com/paultyng/FluentJson.NET

你可以像这样在Razor视图中创建JSON(注意Knockout扩展方法):

@JsonObject.Create()
    .AddProperty("name", "value")
    .AddProperty("childObject", c => {
        .AddProperty("childProperty", "value2")
    })
    .AddObservable("knockoutProperty", 123)

这会生成与此类似的JSON:

{"name":"value","childObject":{"childProperty":"value2"},"knockoutProperty":ko.observable(123)}

Knockout方法是通过扩展方法添加的,其他东西也可以轻松扩展。

如果您需要,该套餐在Nu-Get上。

答案 1 :(得分:3)

假设您的属性名称应该是一个字符串,如果您将@GetPoertyNameUsingRazorSomehow括在引号中,这应该有效。否则,您将未定义的对象传递给observable。

name: ko.observable('@GetPoertyNameUsingRazorSomehow')