我的应用程序是 MVC 5 c#,我使用以下表单来更新表:
@using (Ajax.BeginForm("AddOha", "Medication", new AjaxOptions()
{
UpdateTargetId = "result",
OnSuccess = "getresult",
HttpMethod = "POST"
}))
{
<input id="MedName" name="MedName" value="" class="input-sm form-control" style="width: 100px" placeholder="Value"/>
<input type="submit" value="Save" class="btn btn-primary"/>
}
这是我的 knockout 名单:
<tbody data-bind="foreach: OhaList">
<tr>
<td>
<input data-bind="value: Name" class="input-sm form-control" style="width: 100px" placeholder="Value" />
</td>
</tr>
</tbody>
这是 View 模型:
var ViewModel = function() {
var self = this;
this.OhaList = ko.observableArray([]),
$.ajax({
type: "GET",
url: '@Url.Action("xxx", "xxx")',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
self.OhaList(data);
},
error: function (err) {
alert(err.status + " : " + err.statusText);
}
});
var ohaMed = {
Name: self.Name
};
self.ohaMed = ko.observable();
}
ko.applyBindings(new ViewModel());
我尝试使用以下方法更新列表:
var getresult = function(data) {
if (data[0].Name !== "") {
// alert(data[0].Name);
ViewModel.OhaList.push({ Name: data[0].Name });
// ViewModel.OhaList.push({ Name: "1});
} else {
alert("failed");
}}
虽然我从 Controller 获得了结果,或者即使我对值进行了编码,但我收到以下错误:
Unable to get property 'push' of undefined or null reference
非常感谢您的建议。
最佳答案
您需要随时保留对 View 模型的引用,这是一种方法:
window.viewModel = new ViewModel();
ko.applyBindings(window.viewModel);
然后在 getresult 函数中,您需要使用 ViewModel 的实例来推送值,而不是 ViewModel 类型 本身:
var getresult = function(data) {
if (data[0].Name !== "") {
// alert(data[0].Name);
window.viewModel.OhaList.push({ Name: data[0].Name });
// ViewModel.OhaList.push({ Name: "1});
} else {
alert("failed");
}
}
关于javascript - 使用 Ajax 形式 knockout 推送新数组项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35166652/