aspmvc2 визуализирует частичное представление с помощью jquery, используя движок spark
Я пытаюсь вернуть частичное представление в 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 ответа
Я бы поместил скрипт в обработчик событий готового документа jQuery, чтобы он запускался ПОСЛЕ полной загрузки DOM. это может быть сценарий выполняется до того, как DOM создаст ваш #SourceList
,
например:
<script type="text/javascript">
$(function() {
$("#SourceList").change(function() {
....
Функции Jquery Ajax извлекают JavaScript из результата и запускают его перед вставкой HTML в DOM.
Ваши два лучших варианта либо
Оберните JS в функцию в не-ajax-части представления (либо в представлении, либо в части, которая отображается одновременно), и вызовите эту функцию в качестве вашего успешного обратного вызова при вызове ajax
Или заменить $("#SourceList").change(function() {
с $("#SourceList").live('change', function() {
хотя, даже делая это, вам все равно лучше не включать его как частичное возвращение через Ajax.