aspmvc2 визуализирует частичное представление с помощью jquery, используя движок spark - PullRequest
0 голосов
/ 08 октября 2010

Я пытаюсь вернуть частичное представление в asp mvc2, отображаемое с помощью spark. Представление содержит некоторый JavaScript. Все отображается, но скрипт не выполняется

вот код

<table>
<tr>
<td> 
    !{Html.LabelFor(model => model.SourceId, new { @class = "label-inline", title = "Source d'ouvrage" })}
    !{Html.DropDownList("SourceList", Model.SourceList, "Choisir la source", new { @class = "combo-box" })}
</td>
<td>
    !{Html.LabelFor(model => model.AgentId, new { @class = "label-inline", title = "Représentant" })}
    !{Html.DropDownList("AgentList", Model.AgentList, "Choisir le représentant", new { @class = "combo-box" })}
</td>
</tr>

<script type="text/javascript">
$("#SourceList").change(function() {
    alert('youpi');
    $.ajaxSetup({ cache: false });
        var selectedItem = $(this).val();
        alert(selectedItem);
        if (selectedItem == "" || selectedItem == 0) {
            //Do nothing or hide...?
        } else {
            var path = '~/sources/' + selectedItem + '/agents';
            $.getJSON(path, function(data) {
                agents = data;
                var items = "";
                $.each(data, function(i, agents) {
                    items += "<option value='" + agents.Id + "'>" + agents.Name + "</option>";
                });
                $("#AgentList").html(items);
            });
        }
    });
</script>

Что я делаю не так? спасибо

Ответы [ 2 ]

0 голосов
/ 11 октября 2010

Я бы поместил скрипт в обработчик событий готовности документа jQuery, чтобы он запускался ПОСЛЕ полной загрузки DOM. это может быть сценарий выполняется до того, как DOM создаст ваш #SourceList.

например:

<script type="text/javascript">
    $(function() {
        $("#SourceList").change(function() {
            ....
0 голосов
/ 08 октября 2010

Функции Jquery Ajax извлекают JavaScript из результата и запускают его перед вставкой HTML в DOM.

Ваши два лучших варианта:

Оберните JS в функцию в не-ajax-части представления (либо в представлении, либо в части, отображаемой одновременно), и вызовите эту функцию в качестве вашего успешного обратного вызова при вызове ajax

Или замените $("#SourceList").change(function() { на $("#SourceList").live('change', function() {, хотя, даже делая это, вам все же лучше не включать его в качестве частичного, возвращенного через Ajax.

...