C# 重定向到另一个控制器方法,直接避开视图
我正在尝试C#MVC,但我遇到了以下问题。我正在玩一个小项目,这是一种任务管理工具。目前,我有2个(用户、任务)模型和相应的控制器以及一组视图。 用户控件有一个“Create”方法,该方法显然基于从表单接收的数据创建一个新用户。创建用户时,应自动为其创建任务。以下是我的用户控制器创建/注册方法:C# 重定向到另一个控制器方法,直接避开视图,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试C#MVC,但我遇到了以下问题。我正在玩一个小项目,这是一种任务管理工具。目前,我有2个(用户、任务)模型和相应的控制器以及一组视图。 用户控件有一个“Create”方法,该方法显然基于从表单接收的数据创建一个新用户。创建用户时,应自动为其创建任务。以下是我的用户控制器创建/注册方法: public ActionResult Create() { return View(); } [HttpPost] [ValidateAntiFor
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "userId,dateCreated,dateRemoved,level,firstName,lastName,login,emailAddress,password")] User user)
{
user.dateCreated = DateTime.Now;
if (ModelState.IsValid)
{
db.User.Add(user);
db.SaveChanges();
return RedirectToAction("Create", "Tasks", new { Id = user.userId });
//return RedirectToAction("Index");
}
return View(user);
}
下面是任务控制器的创建任务方法
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "taskId,dateCreated,dateAssigned,userId,assigneeId,taskCategory,taskType,taskPriority,taskStatus,taskName,dateDue,dateClosed,Comments")] Task task, int? Id)
{
task.dateCreated = DateTime.Now;
if (Id != null)
{
task.userId = (int)Id;
task.dateAssigned = DateTime.Now;
task.dateCreated = DateTime.Now;
task.dateDue = DateTime.Now.AddDays(7);
task.taskCategory = taskCategory.assigned;
task.taskType = taskType.System_Induction;
task.assigneeId = 2;
task.taskPriority = taskPriority.Low;
task.taskName = "Iduction to TaskManagementTool";
task.Comments = "Please go through the following training materials:";
task.taskStatus = taskStatus.Assigneed;
if (ModelState.IsValid)
{
db.Tasks.Add(task);
db.SaveChanges();
ViewBag.TaskAssignedNotification = "Hello " + Session["login"].ToString() + " you have new task assigned" ;
switch (Session["level"].ToString())
{
case "Basic":
return RedirectToAction("LoggedAsBasic", "Home");
break;
default:
return RedirectToAction("LoggedAsBasic", "Home");
}
//return RedirectToAction("Index", "Home");
}
}
else
{
task.userId = Int32.Parse(Session["userId"].ToString());
task.taskStatus = taskStatus.Created;
if (Session["level"].ToString() == "Assigner" && task.taskCategory == taskCategory.assigned)
{
task.dateAssigned = DateTime.Now;
}
if (Session["level"].ToString() == "Basic")
task.taskCategory = taskCategory.own;
if (ModelState.IsValid)
{
db.Tasks.Add(task);
db.SaveChanges();
return RedirectToAction("TasksIndex");
}
}
return View(task);
}
创建新用户时,应将新用户Id传递给任务控制器的Create方法,并应为新用户创建预定义任务(在if(Id!=null)中),而无需使用HTML表单打开Create视图。不幸的是,我无法从用户控制器调用任务控制器的Create方法。充其量,我最终会完成创建供填写的任务。你们能帮我解决这个问题吗?在这种情况下,我所需要的只是通过用户/创建操作方法与用户对象一起创建的新任务对象,所以我不需要指向任何其他控制器/操作结果来创建任务
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "userId,dateCreated,dateRemoved,level,firstName,lastName,login,emailAddress,password")] User user, Task task)
{
user.dateCreated = DateTime.Now;
if (ModelState.IsValid)
{
db.User.Add(user);
db.SaveChanges();
task.userId = 2;
task.dateAssigned = DateTime.Now;
task.dateCreated = DateTime.Now;
task.dateDue = DateTime.Now.AddDays(7);
task.taskCategory = taskCategory.assigned;
task.taskType = taskType.System_Induction;
task.assigneeId = user.userId;
task.taskPriority = taskPriority.Low;
task.taskName = "Iduction to TaskManagementTool";
task.Comments = "Please go through the following training materials:";
task.taskStatus = taskStatus.Assigneed;
if (ModelState.IsValid) {
db.Tasks.Add(task);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(user);
}
抱歉,用户控制器的“创建”和“注册”方法都指向任务控制器的“创建”方法。您的/task/create方法似乎不打算在其他任何地方使用,并且在创建用户时与用户绑定。您可以删除/task/create[HttpGet]方法,只需将您的用户标识传递给[HttpPost]。您不需要进行绑定或检查表单是否有效,因为表单没有填写和传递,您所做的只是初始化。您在
TaskController
中的Create()
方法需要ID的参数-public ActionResult Create(int ID)
,然后需要初始化模型的新实例,设置其用户ID
,并将模型传递给view@nocturns2创建新用户时(使用从user/create方法传递的Id)和未传递Id时(menainig现有用户为自己创建新任务),将使用task/create方法@StephenMuecke该方法具有Id参数:public ActionResult Create([Bind(Include=“taskId,dateCreated,dateAssigned,userId,assigneeId,taskCategory,taskType,taskPriority,taskStatus,taskName,dateDue,dateClosed,Comments”)]任务,int?Id)