#mvvm #data-binding #kendo-ui
#mvvm #привязка к данным #kendo-пользовательский интерфейс
Вопрос:
Я пытаюсь разобраться с kendo
привязкой в MVVM.
У меня есть страница Razor, которая выглядит следующим образом…
Index.cshtml
@page
@model IndexModel
@{
ViewData["Title"] = "Index";
}
<div id="frm">
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div class="form-group">
<label><input type="text" class="form-control" data-bind="value: Username"/></label>
</div>
<button type="submit" class="btn btn-primary">Click</button>
}
<label>
<input type="text" class="form-control" data-bind="value: Username" />
</label>
</div>
<script>
var raw = @Html.Raw(Model.Me.ToJson());
var vm = new kendo.observable(raw);
kendo.bind($("#frm"), vm);
</script>
Index.cshtml.cs…
public class IndexModel : PageModelBase
{
[BindProperty]
public Person Me { get; set; }
public void OnGet()
{
Me = new Person { Username = "Bobby Brown" };
}
public void OnPost()
{
var p = Me;
p.Username = ".";
}
public class Person
{
public string Username { get; set; }
public string ToJson() => JsonConvert.SerializeObject(this);
}
}
Когда я визуализирую страницу, 2 входных данных должным образом привязаны к переданному значению из серверной модели.
Когда я изменяю значение в одном из входных данных на стороне клиента и меняю фокус, другой ввод изменяется.
Я ожидаю всего этого.
Когда я нажимаю кнопку, элемент управления возвращается на сервер и выполняет код OnPost()
.
Чего не происходит, так это для Me
установки на что-то другое, чем null
.
Я пробовал это, как показано выше,
Я пробовал рефакторинг OnPost()
метода OnPost(Person me)
, но me
он не установлен.
Я пытался оценить Request.Form
объект, но там ничего нет.
Я уверен, что это должно быть проще, чем я пытаюсь это сделать.
Может кто-нибудь дать какой-либо совет по поводу того, что я делаю неправильно, пожалуйста?
Ответ №1:
В принципе, я тупой.
Я разобрался с этим. Я пытался вставить квадратный штифт в круглое отверстие.
Я добавил скрытый ввод в форму с именем Me
, соответствующим имени свойства, к которому я привязывался.
Я изменил кнопку на обычную кнопку (с submit
кнопки) и добавил onClick
обработчик, который это сделал…
function submitForm() {
$("#Me").val({ Username: vm.get("Username") });
$("#frm").submit();
}
И «вот, появился свет».
Спасибо, что выслушали