Автоматическое сопоставление не похоже на поля «Имя» - PullRequest
5 голосов
/ 05 июня 2011

У меня есть модель, которая выглядит следующим образом.

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 );
    }
}

1 Ответ

5 голосов
/ 05 июня 2011

Похоже, мы решили эту проблему на KO форумах. Автозаполнение не инициировало событие изменения в поле Имя.

Определил привязку данных как: data-bind="value: Name, valueUpdate: 'blur'", чтобы сделать эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...