jquery post to actionresult, который при развертывании нарушает частичное представление - PullRequest
0 голосов
/ 20 августа 2010

Все отлично работает в отладке, но молча взорвется на живом сервере.

Вот мой 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 Ответ

2 голосов
/ 20 августа 2010

Я бы порекомендовал вам всегда использовать HTML-помощники при работе с URL-адресами вместо их жесткого кодирования, как вы это делали.Таким образом, независимо от того, как выглядят ваши маршруты или где развернут ваш сайт (виртуальный каталог или нет), он просто будет работать:

$(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 и продолжаете манипулировать DOM вручную, используя document.getElementById?И обратите внимание, как функция .load() может упростить ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...