Das macht mich verrückt!MVC3- und Ajax-Fehler "Das Parameterwörterbuch enthält einen Nulleintrag für den Parameter ..."
Ich habe eine Ansicht, die mit Ajax mit dem folgenden Skript bevölkert ist.
function loadAcquisitions() {
var description = $("input#searchDescription").val();
var startDate = $("input#searchStartDate").val();
var endDate = $("input#searchEndDate").val();
$.ajax({
type: "POST",
dataType: "json",
url: "/Acquisition/Find",
data: { searchDescription: description, searchStartDate: startDate, searchEndDate: endDate },
success: function (jsonresults) {
$("tbody#acquisitionContent").find("tr").remove().end();
var pageCount = parseInt(jsonresults.length/pageSize);
var startItemIndex = currentPageIndex * pageSize;
var itemsToDisplay = pageSize + startItemIndex;
if ((jsonresults.length - startItemIndex) < pageSize) {
itemsToDisplay = jsonresults.length - startItemIndex + pageSize;
}
for (var i = startItemIndex; i < itemsToDisplay; i++) {
$("tbody#acquisitionContent").append('<tr>' +
'<td><a href="/Acquisition/Edit/' + jsonresults[i].AcquisitionID + '">Edit</a></td>' +
'<td>' + jsonresults[i].AcquisitionDescription + '</td>' +
'<td>' + jsonresults[i].AcquisitionDate + '</td>' +
'<td>$' + jsonresults[i].AcquisitionCost + '</td>' +
'<td>$' + jsonresults[i].InstallationCost + '</td>' +
'<td class="last">$' + jsonresults[i].DeliveryCost + '</td>' +
'</tr>');
}
$('#pageTitle').text('Page ' + (currentPageIndex + 1) + ' of ' + pageCount);
},
error: function (c, b, a) {
alert(a);
}
});
}
Bitte beachten Sie, dass die Verbindung der Leitung erzeugt wird, mit:
'<td><a href="/Acquisition/Edit/' + jsonresults[i].AcquisitionID + '">Edit</a></td>'
Der Link-Tag erscheint korrekt generiert werden und ist in Form von
/Acquisition/Edit/123
In der Steuerung, Ich habe die folgende Funktion namens "Bearbeiten", die wie folgt aussieht:
public ActionResult Edit(int acquisitionID)
{
Acquisition acquisition = Acquisition.Get(acquisitionID);
return View(acquisition);
}
Dann wird in der global.asax Ich habe eine Route für ‚Bearbeiten‘ definiert, die wie folgt aussieht:
routes.MapRoute(
"EditAcquisition",
"{controller}/{action}/{acquisitionID}",
new { controller = "Acquisition", action = "Edit"}
);
Ich habe versucht, die ‚Edit‘ Funktion in der Steuerung Ändern eines Nullable-int zu akzeptieren (int?) acquisitionID, die den Fehler beseitigt - aber nicht die Tatsache ändert, dass eine Null in die "Edit" -Funktion des Controllers über den vom Ajax-Code erzeugten Link übergeben wird.
Jede Hilfe würde sehr geschätzt werden!
Danke!
Update:
Wenn ich die global.asax aktualisieren und 'acquisitionID' als Parameter wie folgt hinzu:
routes.MapRoute(
"EditAcquisition",
"{controller}/{action}/{acquisitionID}",
new { controller = "Acquisition", action = "Edit", acquisitionID = 0 }
);
die Anwendung nun dadurch, dass die Navigations-Links ganz anders verhält, alle haben 'Index' angehängt.
/Acquisition/
wird
/Acquisition/Index
Update:
Hier ist die RegisterRoutes Methode der global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"EditProperty",
"{controller}/{action}/{propertyID}",
new {controller = "Property", action = "Edit"}
);
routes.MapRoute(
"EditAssignee",
"{controller}/{action}/{assigneeID}",
new {controller = "Assignee", action = "Edit"}
);
routes.MapRoute(
"EditAcquisition",
"{controller}/{action}/{acquisitionID}",
new {controller = "Acquisition", action = "Edit"}
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
}
können Sie alle Ihre Routen (* in der Reihenfolge, die Sie * definiert haben) zeigen, weil es wie ein anderer Weg scheint, ist die Suche entsprechen –