MVC中是否有办法将信息从一个控制器传递到另一个控制器?我有一个如下所示的角色模型:
public class Character
{
[Key]
public string CharacterID { get; set; }
public string UserID { get; set; }
public string Name { get; set; }
public int Str { get; set; }
public int Con { get; set; }
public int Dex { get; set; }
public int Int { get; set; }
public int Wis { get; set; }
public int Cha { get; set; }
public int BaseAttack { get; set; }
}
还有一个像这样的武器模型:
public class Weapons
{
[Key]
public string WeaponID { get; set; }
public string UserID { get; set; }
public string CharacterID { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public string Range { get; set; }
public int Damage { get; set; }
public int Crit { get; set; }
public int CritMultiplier { get; set; }
public string Hands { get; set; }
public string Distance { get; set; }
}
要创建武器,首先需要创建一个分配了ID的角色,我希望能够将该ID传递给我的武器控制器的create方法。有没有办法做到这一点?感谢
答案 0 :(得分:0)
我倾向于通过路由将字符id传递给创建武器操作,作为构成路径一部分的路由令牌或通过查询字符串。务必检查武器在逻辑上是否与id对应的角色相关联。
您也可以使用TempData
或Session
传递ID,但默认情况下两者都会占用网络服务器上的内存,简单的选择是使用路由。此外,除非您在访问TempData.Keep("key")
后致电TempData
,否则该值将在首次访问后从TempData
移除,如果用户刷新浏览器窗口,可能会导致问题。
答案 1 :(得分:0)
您可以将TempData用于此目的。 TempData仅在两个请求之间存储数据。设置TempData时,下一个启动的请求可以从TempData中检索值,并且它将被删除以用于任何后续请求。
[HttPost]
public ActionResult CreateCharacter()
{
// creates charaeters here and sets the tempdata
TempData['CharacterId'] = 50;
return RedirectToAction('CreateWeapon');
}
[HttpGet]
public ActionResult CreateWeapon()
{
var weaponModel = new WeaponModel() { CharacterId = (int)TempData['CharacterId'] };
return View(weaponModel);
}
并且在您的视图中只有一个隐藏的CharacterId,因此如果您的帖子验证失败或者您需要重新显示视图,它将被保留。
@Html.HiddenFor(e => e.CharacterId);
这只是一种方法,只有你不想在网址中传递CharacterId。
你也可以通过在网址中传递它来实现这个目标:
[HttPost]
public ActionResult CreateCharacter()
{
// creates charaeters here and sets the tempdata
return RedirectToAction('CreateWeapon', new { characterId = 50 });
}
[HttpGet]
public ActionResult CreateWeapon(int characterId)
{
var weaponModel = new WeaponModel() { CharacterId = characterId };
return View(weaponModel);
}
答案 2 :(得分:0)
您可以使用RedirectToAction()
,但标题是这将导致浏览器重定向。
return RedirectToAction("CreateWeapon", "Weapon", new { id = yourid });
或
@Html.ActionLink("CreateWeapon", "Create", new { id = yourid })
编辑:您的普通对象属性名称和操作方法变量需要匹配才能执行此操作。