自动映射似乎不像'名称'字段

时间:2011-06-04 21:20:46

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

我的模型看起来像这样。

class Aspect {
  Guid Id { get; set; }
  string Name { get; set; }
  string Description { get; set; }
  // multiple other properties
}

在我的视图(ASP.NET MVC 3.0)中,我试图使用KnockoutJS映射插件。我这样称呼它。 ( 下列出的Html助手)

// attempt to bind any data we received from the server
var serverData = @Html.Interpret(Model);
// auto map the knockout attributes from the server data
var viewModel = ko.mapping.fromJS(serverData);
// apply the knockout binding to the viewModel
ko.applyBindings(viewModel, $("#__frmAspect")[0]);
// attach the jquery unobtrusive validator
$.validator.unobtrusive.parse("#__frmAspect");

viewModel.Save = function() {
    // we will try to send the model to the server.
    ko.utils.postJson(
        $("#__frmAspect").attr('action'), { model: ko.toJS(viewModel) }
    );
};

// bind the submit handler to unobtrusive validation.
$("#__frmAspect").data("validator").settings.submitHandler = viewModel.Save;

在大多数情况下,这确实有效。但是,无论出于何种原因,它都不喜欢Name字段。

创建,请注意。如果我在knockout.js文件中的postJson处放置一个断点,我可以坐在那里看到ko.observable() 确实存在。它只是没有被输入字段设置。

有人可以告诉我为什么会这样吗?

我的Html助手:

namespace System.Web.Mvc {
    public static class KnockoutHelpers {
        public static MvcHtmlString Interpret<TModel>(this HtmlHelper htmlHelper, TModel model) {
            return new MvcHtmlString(model.ToJson());
        }
    }

    public static string ToJson ( this object item ) {
        return new System.Web.Script.Serialization.JavaScriptSerializer( ).Serialize( item );
    }
}

1 个答案:

答案 0 :(得分:5)

看起来我们在KO论坛上解决了这个问题。自动填充未在名称字段上触发更改事件。

将数据绑定定义为:data-bind="value: Name, valueUpdate: 'blur'"以使其正常工作。