asp mvc使用火花引擎渲染部分视图与jquery

时间:2010-10-08 16:50:37

标签: jquery asp.net-mvc-2 spark-view-engine

我正在尝试返回使用spark渲染的asp mvc2中的局部视图。 该视图包含一些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 :(得分:0)

Jquery Ajax函数将从结果中删除javascript并在将HTML插入DOM之前运行它。

你最好的两个选择是

将JS包含在视图的非ajax部分(视图或同时呈现的部分)的函数中,并将此函数作为ajax调用的成功回调调用

或者将$("#SourceList").change(function() {替换为$("#SourceList").live('change', function() {,但即使这样做,您最好不要将其作为通过Ajax返回的部分包含在内。

答案 1 :(得分:0)

我会将脚本放在jQuery文档就绪事件处理程序中,以便在DOM完全加载后运行它。可能是在DOM创建#SourceList之前脚本正在运行。

例如:

<script type="text/javascript">
    $(function() {
        $("#SourceList").change(function() {
            ....