Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 重定向到另一个控制器方法,直接避开视图_C#_Asp.net Mvc - Fatal编程技术网

C# 重定向到另一个控制器方法,直接避开视图

C# 重定向到另一个控制器方法,直接避开视图,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试C#MVC,但我遇到了以下问题。我正在玩一个小项目,这是一种任务管理工具。目前,我有2个(用户、任务)模型和相应的控制器以及一组视图。 用户控件有一个“Create”方法,该方法显然基于从表单接收的数据创建一个新用户。创建用户时,应自动为其创建任务。以下是我的用户控制器创建/注册方法: public ActionResult Create() { return View(); } [HttpPost] [ValidateAntiFor

我正在尝试C#MVC,但我遇到了以下问题。我正在玩一个小项目,这是一种任务管理工具。目前,我有2个(用户、任务)模型和相应的控制器以及一组视图。 用户控件有一个“Create”方法,该方法显然基于从表单接收的数据创建一个新用户。创建用户时,应自动为其创建任务。以下是我的用户控制器创建/注册方法:

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)