У меня есть модель, которая выглядит следующим образом.
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
.
Это создает это, имейте в виду. Если я установлю точку останова на postJson
в файле knockout.js, я могу сидеть там и видеть, что ko.observable()
существует . Это просто не устанавливается в поле ввода.
Может кто-нибудь сказать мне, почему это может быть?
My Html Helpers:
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 );
}
}