我正在创建一个编辑视图,该视图将根据编辑操作更改其内容和表单元素。我传递一个模型,将一个值存储在一个隐藏元素中,然后,一旦文档准备就绪,我使用ajax来填充下拉列表。紧接着我需要选择正确的选项,该选项等于隐藏元素中的值。 我的代码无法工作,我一直试图找出为期2天的原因。
剃刀
@Html.DropDownList("ddl_publisher", new List<SelectListItem>(), new { @class = "form-control form-group", @style = "display:none", @onchange = "storeNewPublisher()" });
@Html.Hidden("hid_publisher", Model.Value, new { @class = "form-control" })
JQUERY
$(document).ready(function(){
loadPublishers();
changeDDLSelection();
}
function changeDDLSelection() {
publ = $("#hid_publisher").val();
$("#ddl_publisher").val(publ).change();
}
function storeNewPublisher() {
var publisherText = $("#ddl_publisher option:selected").text();
var publisherValue = $("#ddl_publisher option:selected").val();
var publisherStatus = publisherText.replace(publisherValue, '').replace('-', '').replace('[', '').replace(']', '').trim();
$("#hid_publisher").val(publisherValue);
$("#hid_publisherStatus").val(publisherStatus);
}
AJAX
function loadPublishers() {
$.ajax({
type: "GET",
url: "/Filter/GetPublishers/",
contentType: 'application/json',
data: { productType : $("#ddl_filterProdType option:selected").val() },
success: function (data) {
$.each(data, function (i, pub) {
$("#ddl_publisher").append('<option value="' + pub.Text + '"> [ ' + pub.Value + ' ] - ' + pub.Text + '</option>');
});
},
error: displayPublishFailureMessage
});
}
调用成功,并且在 changeDDLSelection 内部变量 publ 具有正确的值,但下拉列表不会更改其选项(相反,它会执行此操作)如果我在Chrome控制台中执行代码)。 然而,更改会触发,因此会触发 storeNewPublisher ,但每个局部变量都是未定义。
我不能把头撞到墙上,我的邻居们都在抱怨。
非常感谢提前
答案 0 :(得分:0)
在您当前的实施中,您在changeDDLSelection
之后调用loadPublishers
方法。但这并不意味着你的第二个方法总是在changeDDLSelection方法完成它必须做的所有事情之后执行。如果你在每个方法中放入一个console.log,你会看到这个。
你应该做的是,在调用changeDDLSelection
方法的ajax调用的success
事件中调用loadPublishers
方法(在附加结果数组中的所有选项之后)
function loadPublishers() {
$.ajax({
type: "GET",
url: "/Filter/GetPublishers/",
contentType: 'application/json',
data: { productType : $("#ddl_filterProdType option:selected").val() },
success: function (data) {
$.each(data, function (i, pub) {
$("#ddl_publisher").append('<option value="' + pub.Text +
'"> [ ' + pub.Value + ' ] - ' + pub.Text + '</option>');
});
//Safely call the second method here
changeDDLSelection();
},
error: displayPublishFailureMessage
});
}
function changeDDLSelection() {
var publ = $("#hid_publisher").val();
$("#ddl_publisher").val(publ).change();
}
$(document).ready(function(){
loadPublishers();
}