RedirectToAction在一个动作方法中,该方法在MVC中的实体中创建一个新对象

时间:2012-05-10 11:30:04

标签: c# asp.net asp.net-mvc asp.net-mvc-3 redirecttoaction

我有一个跟随的动作方法:

    public ActionResult CreateNKITemplate(int id)
    {
        var goalcard = createNKIRep.GetGoalCardByID(id);
        createNKIRep.CreateTemplate(goalcard);

        return View();
    }

此操作方法将在我的GoalCard实体中创建一个新的GoalCard对象,这意味着它将基本生成一个ID。

在CreateTemplate内部操作方法我想删除return View();并添加return RedirectToAction,以便重定向到已创建的新GoalCard对象ID

我想将新的GoalCard对象ID重定向到:

public ActionResult Edit(int id)
{
   // code..
}

我该怎么做?

基本上:复制并创建一个新的Object,然后将新的对象id重定向到以Id为参数的编辑操作方法。

更新

接受的答案解决方案:

   public ActionResult CreateNKITemplate(int id)
    {
       var goalcard = createNKIRep.GetGoalCardByID(id);
       var copygoalcard = createNKIRep.CreateTemplate(goalcard);
       var GoalCardCopyID = copygoalcard.Id;

       return RedirectToAction(
              "Edit", // Action name
              "CreateNKI", // Controller name
              new { id = GoalCardCopyID }); // Route values

    }

提前致谢!

2 个答案:

答案 0 :(得分:3)

嗯,RedirectToAction的定义是。

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

所以我们只是填写你的价值观。

RedirectToAction(
    "Edit",                // Action name
    "GoalCardController",  // Controller name
    new { id = gcId }      // Route values
)

请注意,上面的代码假定您的控制器名为GoalCardController,并且id存储在名为gcId的变量中。

答案 1 :(得分:1)

你问这个吗?

public ActionResult CreateNKITemplate(int id)
{
    var goalcard = createNKIRep.GetGoalCardByID(id);
    createNKIRep.CreateTemplate(goalcard);

    return RedirectToAction("Edit", new { id = id});
}

这将重定向您并将id作为参数,您可以以相同的方式添加多个参数,只需“,”除以。

如果您愿意,您还可以通往另一个控制器的路径。