Der folgende Code füllt ein zweites Dropdown-Menü, wenn sich das erste Dropdown-Menü ändert (d. H. Kaskadierende Dropdown-Menüs). Der Ajax-Aufruf wird jedoch nicht ausgelöst, und ich kann nicht herausfinden, warum. Ich bekomme keine Syntax- oder Laufzeitfehler. Im Debug-Modus wird die GetPlans-Aktion niemals aufgerufen. Die innere Warnung wird nie genannt, aber die äußere ist. Um das Ganze noch schlimmer zu machen, funktioniert das gleiche Setup anderswo in meiner App! Hier alle relevanten Stücke (lassen Sie mich wissen, wenn ich habe ein paar wichtige Details weggelassen):Ajax-Abfrage wird nicht ausgelöst, weil die falsche URL generiert wird
"Report/Auth" Ansicht:
<script type="text/javascript" src="../../Scripts/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script>
<script type="text/javascript">
$(function() {
$("#year").change(function() {
var year = $("#year > option:selected").attr("value");
var rid = $("#rid").attr("value");
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
url: "GetPlans/" + rid + "/" + year,
data: "{}",
dataType: "json",
success: function(data) {
alert('inside');
if (data.length > 0) {
var options = '';
for (p in data) {
var plan = data[p];
options += "<option>" + plan + "</option>";
}
$("#plan").html(options);
} else {
$("#plan").html('');
}
}
});
alert("outer");
});
});
</script>
<% Using Html.BeginForm()%>
<%=Html.Hidden("rid")%>
Year:
<%=Html.DropDownList("year", Model.Years)%>
Plan:
<%=Html.DropDownList("plan")%>
<% End Using%>
ReportController:
Function Auth(ByVal rid As Integer) As ActionResult
ViewData("plan") = New SelectList(New List(Of SelectListItem))
Return View(New Auth)
End Function
Public Function GetPlansByYear(ByVal rid As Integer, ByVal year As Integer) As JsonResult
Dim plans = _
(From bp In BenefitDataContext.GetContext.BenefitPlans _
Where bp.Benefit.repository_id = rid _
And bp.Benefit.plan_year_val = year _
Select bp.MphcPlan).Distinct
Return New JsonResult _
With {.Data = _
From p In plans _
Select New SelectListItem _
With {.Text = p.plan_code & " - " & p.plan_desc, _
.Value = p.plan_id}}
End Function
Auth Klasse:
Public Class Auth
Private _years As SelectList
Public Property Years() As SelectList
Get
Return _years
End Get
Set(ByVal value As SelectList)
_years = value
End Set
End Property
Public Sub New()
Dim disinctYears = _
(From b In BenefitDataContext.GetContext.Benefits _
Where b.repository_id = 1 _
Select b.plan_year_val).Distinct
Dim yearList = _
From y In disinctYears _
Order By y _
Select New SelectListItem _
With {.Text = y, _
.Value = y, _
.Selected = (y = Now.Year)}
Years = New SelectList(yearList, "Value", "Text")
End Sub
Global.asax - Registrieren Routen:
routes.MapRoute(_
"AuthReportGetPlans", _
"GetPlans/{rid}/{year}", _
New With {.controller = "Report", .action = "GetPlansByYear", .rid = "", .year = ""} _
)
Irgendwelche Ideen, wie man herausfinden kann, was los ist?
UPDATE: das Problem gefunden, die Fehlerausgabe des Ajax-Aufruf über die Kontrolle, so weiß ich jetzt, die Ursache des Problems: die URL an den Strompfad angehängt wird, anstatt von der Route genannt wird, dh/Berichte/Auth/GetPlans/1/2009 anstelle von/GetPlans/1/2009. Dies ist verwirrend, da es so aussieht, als ob es korrekt in global.asax eingerichtet wurde, um es der Route zuzuweisen, die ich eingerichtet habe, und wie bereits erwähnt, habe ich dies in einer anderen Ansicht eingerichtet und es funktioniert dort gut. Irgendeine Eingabe, warum der Ajax-Aufruf den falschen Pfad angibt?
Interessant. Wenn man es absolut machte (d. H. Den führenden Schrägstrich hinzufügte), schien das Problem zu beheben. Es ist interessant, weil meine andere Implementierung dieses Codes nicht den führenden Schrägstrich hatte und gut funktionierte (das funktioniert auch gut mit dem führenden Schrägstrich, also habe ich es an beiden Stellen gelassen). – gfrizzle
Der führende Schrägstrich macht Ihre URL absolut. Ich wette, du warst in einem Unterverzeichnis, als der Code aufhörte. –