我在使用mvc中的RedirectToAction方法時遇到問題。我的地圖路線是這樣的。如何使用RedirectToAction正確
routes.MapRoute(
"Project", // Route name
"{Controller}/{Action}/{projectId}/{machineName}/{companyId}",
new { controller = "Project", action = "Directives", projectId = 0, machineName = "", companyId = 0 } // Parameter defaults);
而且回這個樣子:
return RedirectToAction("Directives", "Project", new { projectId = projectId, machineName = project.MachineName, CompanyId = user.Company_Id });
它的工作原理知府,但我用它仍然看起來像這樣
http://localhost:1843/Project/Directives?projectId=48&machineName=Netduino&companyId=27
控制器的RedirectToAction:
[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();
}
接收控制器:
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();
}
但我想要的方式是這樣的。
http://localhost:1843/Project/Directives/48/Netduino/27
但奇怪的是,我可以在Url手動輸入它是一個完美的工作。我做錯了什麼?
你好。出於某種原因,我仍然無法讓它正常工作。我已經添加了我的控制器,它發送數據 – mortenstarck
我剛剛開始工作。問題出現在幾個地方。 1.在Global.asax.cs文件中,我需要特定像這樣的「Project/{action}/{machineName}/{projectId}/{directiveId}/{directiveName}」。我用你的建議使用RedirectToRoute而不是ToAction,然後我工作。 – mortenstarck