Tôi gặp sự cố khi sử dụng phương thức RedirectToAction trong mvc. Tuyến đường Bản đồ của tôi trông như thế này.Cách sử dụng RedirectToAction đúng
routes.MapRoute(
"Project", // Route name
"{Controller}/{Action}/{projectId}/{machineName}/{companyId}",
new { controller = "Project", action = "Directives", projectId = 0, machineName = "", companyId = 0 } // Parameter defaults);
Và sự trở lại giống như thế này:
return RedirectToAction("Directives", "Project", new { projectId = projectId, machineName = project.MachineName, CompanyId = user.Company_Id });
Nó hoạt động hảo, nhưng tôi sử dụng các RedirectToAction nó vẫn trông giống như
http://localhost:1843/Project/Directives?projectId=48&machineName=Netduino&companyId=27
điều khiển này:
[HttpPost]
[ValidateInput(false)]
public ActionResult Create(Project project, string text)
{
ViewBag.MachineType = new List<string>(new string[] { "Machine Type A", "Machine Type B", "Machine Type C", "Machine Type D", "Machine Type E" });
if (ModelState.IsValid)
{
UserAccess user = (UserAccess)(Session["UserAccessInfo"]);
Int64 projectId = DataBase.DBProject.InsertProject(project.ProjectNumber, project.MachineName, project.MachineNameEnglish, 1, project.Serial, text, user.Company_Id,project.MachineType);
return RedirectToAction ("Directives", "Project", new { projectId = 48, machineName = "Netduino", companyId = 27 });
// return RedirectToAction("Directives", "Project", new { projectId = projectId, machineName = project.MachineName, CompanyId = user.Company_Id });
}
else
{
ModelState.AddModelError("", "Invalid username or password");
}
return View();
}
Đang nhận bộ điều khiển:
public ActionResult Directives(int projectId, string machineName, int companyId)
{
convertedDirectives = new List<Models.Directives>();
ViewBag.MachineName = machineName;
ViewBag.ProjectId = projectId;
List<object> Directives = new List<object>();
if (ModelState.IsValid)
{
Directives = DataBase.DBProject.GetDirectives(companyId);
foreach (List<object> dir in Directives)
{
Directives newDirective = new Models.Directives();
newDirective.CompanyID = Convert.ToInt32(dir[0]);
newDirective.DirectiveId = Convert.ToInt32(dir[1]);
newDirective.Id = Convert.ToInt32(dir[2]);
newDirective.DirectiveName = Convert.ToString(dir[3]);
newDirective.DirectiveNameShort = Convert.ToString(dir[4]);
newDirective.Created = Convert.ToDateTime(dir[5]);
convertedDirectives.Add(newDirective);
}
}
else
{
ModelState.AddModelError("", "An error has ");
}
ViewBag.DirectivesList = convertedDirectives;
return View();
}
Nhưng cách tôi muốn nó là như thế này.
http://localhost:1843/Project/Directives/48/Netduino/27
Nhưng điều kỳ lạ là tôi có thể nhập thủ công trong Url khi nó hoạt động hoàn hảo. Tôi đang làm gì sai?
Xin chào. Đối với một số lý do tôi vẫn không thể làm cho nó hoạt động chính xác. Tôi đã thêm Bộ điều khiển gửi dữ liệu – mortenstarck
Tôi vừa làm việc đó. Vấn đề là một vài nơi. 1. Trong tệp Global.asax.cs tôi cần phải cụ thể như thế này "Project/{action}/{machineName}/{projectId}/{directiveId}/{directiveName}" '. Và tôi đã sử dụng đề xuất của bạn bằng cách sử dụng RedirectToRoute thay vì ToAction và sau đó tôi đã làm việc. – mortenstarck