これは私を狂わせています!
以下のスクリプトを使用してAjaxを使用して入力されたビューがあります。
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);
}
});
}
リンクは次の行を使用して生成されることに注意してください。
'<td><a href="/Acquisition/Edit/' + jsonresults[i].AcquisitionID + '">Edit</a></td>'
リンクタグは正しく生成されているようで、次の形式になっています。
/Acquisition/Edit/123
コントローラには、次のような「編集」という関数があります。
public ActionResult Edit(int acquisitionID)
{
Acquisition acquisition = Acquisition.Get(acquisitionID);
return View(acquisition);
}
次に、global.asaxに、次のような「編集」用に定義されたルートがあります。
routes.MapRoute(
"EditAcquisition",
"{controller}/{action}/{acquisitionID}",
new { controller = "Acquisition", action = "Edit"}
);
コントローラーの「編集」関数を変更して、エラーを取り除くnull許容のint(int?)acquisitionIDを受け入れようとしましたが、コントローラーにnullが渡されているという事実は変更されません「編集」関数Ajaxコードによって生成されたリンクから。
どんな助けでも大歓迎です!
ありがとう!
アップデート:
global.asaxを更新し、次のようなパラメーターとして「acquisitionID」を追加すると、次のようになります。
routes.MapRoute(
"EditAcquisition",
"{controller}/{action}/{acquisitionID}",
new { controller = "Acquisition", action = "Edit", acquisitionID = 0 }
);
アプリケーションの動作は大きく異なり、ナビゲーションリンクにはすべて「インデックス」が追加されています。
/Acquisition/
になります
/Acquisition/Index
アップデート:
これがglobal.asaxのRegisterRoutesメソッドです。
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}
);
}