jquery发布到actionresult,在部署时呈现部分视图

时间:2010-08-20 16:21:37

标签: jquery asp.net-mvc asp.net-mvc-2

一切都在调试中完美无缺,但在现场服务器上无声地爆炸。

这是我的jquery,它检查页面下拉框中选择的内容:

<script type="text/javascript" >
    $(document).ready(function () {
        $("#Schools").change(function () {
            if ($("#Schools").val() != "") {
                $.post("ReturnVisitDates", { SchoolID: $("#Schools").val() }, function (retHTML) {
                    document.getElementById("VisitDates").innerHTML = retHTML;
                });
            }
            else {
                document.getElementById("VisitDates").innerHTML = "";
            }
        });
    });

以下是从jquery发布的操作结果:

Function ReturnVisitDates(ByVal SchoolID As Integer) As ActionResult
    Dim articlerepo As New NewsRepository
    Dim _VisitDates As New List(Of SelectListItem)
    _VisitDates = articlerepo.ListAllVisitDates(SchoolID)
    For Each item In _VisitDates
        item.Text = FormatDateTime(item.Text, DateFormat.ShortDate)
    Next
    If _VisitDates.Count > 0 Then
        ViewData("VisitDates") = _VisitDates
        Return PartialView("ReturnVisitDates")
    End If
End Function

以下是主要观点:

<div style="text-align:center">
<h1>Welcome to EV Connect!</h1><br />
<h2>Please select your school:</h2>
<% Using Html.BeginForm()%>
<div style="text-align:center"><%: Html.DropDownList("Schools")%></div><br />
<div id="VisitDates"></div>
<br />
<% End Using%>

和部分视图:

<%: Html.DropDownList("VisitDates")%><br /><br />

如前所述,这在我的开发环境中完全正常,并且在实时服务器上似乎失败了。我已经用firebug进行了一些挖掘,似乎在部分视图中抛出了404,说它无法找到“Home / ReturnVisitDates”。

1 个答案:

答案 0 :(得分:2)

我建议您在处理网址时始终使用HTML帮助程序而不是像您一样对其进行硬编码。这种方式无论您的路线如何或部署您的站点(虚拟目录与否),它都将起作用:

$(function () {
    $('#Schools').change(function () {
        var schoolId = $(this).val();
        if (schoolId != '') {
            var url = '<%= Url.Action("ReturnVisitDates", "Home") %>';
            $('#VisitDates').load(url, { SchoolID: schoolId });
        } else {
            $('#VisitDates').html('');
        }
    });
});

另外,为什么你使用jQuery并仍然使用document.getElementById手动执行DOM操作?并注意.load()函数如何简化代码。