У меня есть скрытое поле в шаблоне нокаута, которое его значение обновляется с помощью jquery. Проблема в том, что при попытке передать это значение серверу с помощью ajax, я получаю нулевое значение в контроллере. Но исходный код html показывает, что значение скрытого поля обновляется. Если бы я заменил скрытое поле текстовым полем, это будет нормально работать только при вводе текста вручную.knockoutjs data bind скрытое значение поля
JQuery
function getFileDetail(fileID, fileName) {
$('#hdnFileName' + fileID).val(fileName);
$('#lblFileName' + fileID).text(fileName);
}
Вот шаблон HTML Нокаут:
<script type="text/html" id="fileTemplate">
<div data-role="fieldcontain">
<a href="#" data-bind="click: function() { openFileUpload('file', ID) }"><label data-bind="text: 'File Upload ' + ID, attr: { id: 'lblFileName' + ID }"></label></a><input type="button" value="Remove" data-bind="click: removeFile" />
</div>
<input type="hidden" name="hdnFileName" data-bind="attr: { id: 'hdnFileName' + ID, value: fileName }" />
</script>
ViewModel
function FileViewModel() {
var self = this;
self.ID = ko.observable();
self.fileName = ko.observable();
self.removeFile = function (file) { };
self.Files = ko.observableArray([{ ID: 1, fileName: "", removeFile: function (file) { self.Files.remove(file); }}]);
self.addNewFile = function() {
var newFile = new FileViewModel();
newFile.ID = self.Files().length + 1;
newFile.fileName = "";
newFile.removeFile = function (file) { self.Files.remove(file); };
self.Files.push(newFile);
//$("input[name='hdnFileName'").trigger("change");
}
}
function ViewModel() {
var self = this;
self.fileViewModel = new FileViewModel();
self.submitForm = function() {
$.ajax({
type: "POST",
url: "<%= Url.Action("MeetingPresenter")%>",
data: "{Files:" + ko.utils.stringifyJson(self.fileViewModel.Files) + "}",
contentType: "application/json",
success: function (data) {},
});
};
}
Где вы вставляете значение с помощью 'jQuery'? – adricadar
Кажется странным, что вы используете привязку attr для привязки значения. Есть ли причина, по которой вы не используете привязку значения? –
@adricadar Я только что добавил jQuery –