如何将值从控制器方法传递给另一个?

时间:2012-03-26 07:39:09

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

我是MVC3的初学者,我想从另一个控制器的方法中获取一个值。这里有两种方法:

    [HttpPost]
    public ActionResult Create(TennisClub tennisclub)
    {
        if (ModelState.IsValid)
        {
            db.TennisClubs.Add(tennisclub);
            db.SaveChanges();
            return RedirectToAction("AssignManager");  
        }

        return View(tennisclub);
    }

    [HttpPost]
    public ActionResult AssignManager(Manager manager)
    {

    }

所以,当我创建一个新的网球俱乐部时,我想立即指派一名经理......为此,我需要主键“ID”。

所以我的问题是:如何在我的“AssignManager”方法中获取此ID?提前致谢

3 个答案:

答案 0 :(得分:3)

您无法重定向到使用[HttpPost]属性修饰的动作。这不是重定向的工作原理。重定向意味着您使用新的Location标头向客户端发送301 HTTP状态代码,并且客户端向此新位置发出GET请求。

因此,一旦从AssignManager操作中删除[HttpPost]属性,就可以将id作为参数传递:

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

然后:

[HttpPost]
public ActionResult AssignManager(int id)
{

}

答案 1 :(得分:1)

return RedirectToAction("AssignManager", new { id = tennisclub.Id }); 

您还需要从操作中删除[HttpPost]属性

public ActionResult AssignManager(int id) {
  //...
}

答案 2 :(得分:1)

基本上,你需要有一个GET AssignManager方法,它有一个参数告诉它应该分配哪个TennisClub经理:

[HttpGet]
public ActionResult AssignManager(int tennisClubId)
{
    // here, you will want to return AssignManager view
}

AssignManager重定向到Create时,您可以指定TennisClub的ID:

return RedirectToAction("AssignManager", new { tennisClubId = tennisclub.Id });