一切都在调试中完美无缺,但在现场服务器上无声地爆炸。
这是我的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”。
答案 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()
函数如何简化代码。