2016-10-02 77 views
-1

我正在创建一个编辑视图,它将根据编辑操作更改其内容和表单元素。我传递一个模型,在一个隐藏的元素中存储一个值,然后,一旦文档准备就绪,我使用ajax来填充下拉列表。紧接着,我需要选择与隐藏元素中的值相等的正确选项。 我的代码不起作用,我一直在试图找出为什么2天。MVC - jQuery的填充后选择正确的下拉选项

RAZOR

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

呼叫succeedes了,里面changeDDLSelection变量publ具有正确的值,但下拉列表不会改变它的选项(它这样做,而是如果我在Chrome控制台中执行代码)。 然而,更改火灾,所以storeNewPublisher被触发,但每个局部变量是undefined

我不能把我的头撞在墙上,我的邻居们都在抱怨。

提前

+0

OK(附加所有从结果阵列的选项后),这其实与一起工作Shyju的回答!谢谢!我不知道为什么链接电话不会做的 – strongmmc

回答

0

在你当前的实现非常感谢,您呼叫​​后changeDDLSelection方法。但是这并不意味着你的第二个方法总是在changeDDLSelection方法完成它所要做的所有事情之后执行。如果你在每个方法中放置一个console.log,你会看到这个。

什么,你应该做,调用success事件Ajax调用内的changeDDLSelection方法​​方法

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();  
} 
+0

不幸的是,这是我把它放在第一位,但我有相同的结果,我想,也许,由于某种原因,它不是在代码的成功部分。 – strongmmc

+0

它与Nadeem建议的分开呼叫一起工作。 我以为电话是连续的,不是平行的!非常感谢! – strongmmc