0

我试图将我的 JS 移动到一个单独的文件中,而不是直接在页面上。但是,由于某种原因,我无法让它工作。

我想根据下拉选择更新站点。我现在的做法是这样的:

看法:

<script type="text/javascript">
$(document).ready(function () {
    $("#EntityType").change(function () {
        /* Get the selected value of dropdownlist */
        var selectedID = $(this).val();

        /* Request the partial view with .get request. */
        $.get('/Entity/Create_DropDownList/' + selectedID, function (data) {

            /* data is the pure html returned from action method, load it to your page */
            $('#entity_form_attributes').html(data);
            /* little fade in effect */
            $('#entity_form_attributes').fadeIn('fast');
        });
    });
});
</script>

    <div class="editor-field">
        @Html.DropDownList("EntityType", (SelectList)ViewData["Types"])
    </div>

    <div id="entity_form_attributes"></div>

这是有效的。部分视图按原样加载到 div 标记中。但是如果创建一个 JavaScript 文件然后将脚本移动到该文件中,它就会失败。从一个共享的起始站点,我包含了 JavaScript 文件。

谁能看到我做错了什么。该应用程序是 MVC3 应用程序。是否有我必须设置的设置/属性才能使其工作?

4

1 回答 1

1

谁能看到我做错了什么。

是的,您在此处对 url 进行了硬编码,而不是使用 Url 助手来生成它。你不应该这样做:

$.get('/Entity/Create_DropDownList/'

当您在 IIS 中部署应用程序时,这将中断,因为您的 url 错误。由于这个硬编码的 url,您省略了在开头包含虚拟目录名称。

因此,在 ASP.NET MVC 应用程序中处理 url 时,请始终使用 Url 助手。因此,在您的情况下,您可以在视图中将此 url 生成为 HTML5data-*属性:

@Html.DropDownList(
    "EntityType", 
    (SelectList)ViewData["Types"], 
    new { data_url = Url.Action("Create_DropDownList", "Entity") }
)

然后在您单独的 javascript 文件中简单地检索此 url 并使用它:

$("#EntityType").change(function () {
    /* Get the selected value of dropdownlist */
    var selectedID = $(this).val();

    /* Get the url from the data-url HTML attribute */ 
    var url = $(this).data('url');

    /* Request the partial view with .get request. */
    $.get(url, { id: selectedID }, function (data) {
        /* data is the pure html returned from action method, load it to your page */
        $('#entity_form_attributes').html(data);
        /* little fade in effect */
        $('#entity_form_attributes').fadeIn('fast');
    });
});
于 2012-08-14T09:03:36.827 回答