Tôi muốn chuyển hướng đến một hành động trong cùng một bộ điều khiển, nhưng mất giá trị tuyến đường (cụ thể là giá trị id
). Điều này hóa ra lại rất khó khăn. Tôi có tuyến cấu hình như thế này:Có thể xóa các giá trị tuyến đường bằng RedirectToAction không?
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
... và một phương pháp hành động bên trong EventsController
một cái gì đó như thế này:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
return RedirectToAction("Index", new { id = (int?)null });
}
// (code to display status)
}
Nếu tôi sau đó truy cập vào một cái gì đó giống như /Monitoring/Events/1001
, các RedirectToAction
thực sự là gọi, nhưng tôi được chuyển hướng đến /Monitoring?id=1001
thay vì chỉ /Monitoring
. Có vẻ như nó khớp với tuyến đường đầu tiên, Monitoring_controllerIdSpecified
, mặc dù tuyến đường đó có thông số tuyến bắt buộc là id
và tôi đã yêu cầu đặt số id
thành vô giá trị, và bizarrely chuyển id
thành khóa chuỗi truy vấn. Nói cách khác, nó không được xóa/xóa giá trị tuyến đường id
. Đặt id
thành một chuỗi trống trong đối tượng routeValues
được chuyển đến RedirectToAction
chỉ cung cấp cùng một hiệu ứng như đặt nó thành null
.
Tại sao nó làm điều này và làm cách nào tôi có thể thuyết phục nó không khớp với tuyến đường đầu tiên vì id
đã bị xóa hoàn toàn khỏi giá trị tuyến đường?
có bạn đã cố gắng loại bỏ các Id từ routevaluedictionary trước khi chuyển hướng? – Slicksim
Bạn cũng có thể thử 'RedirectToRoute' thay vì' RedirectToAction'. – danludwig
@Slicksim 'RouteValueDictionary' nào bạn đang nói đến? Bạn có thể đưa ra một ví dụ về ý nghĩa của mã không? – Jez