我发现奇怪的是我无法找到有关如何动态填充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。我还没有看到任何解释如何的教程。我错过了什么?
答案 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')