C# 使用TempData dictionary可防止重定向操作无法工作
我想将视图模型添加到C# 使用TempData dictionary可防止重定向操作无法工作,c#,asp.net-mvc,controller,viewmodel,C#,Asp.net Mvc,Controller,Viewmodel,我想将视图模型添加到TempData,以便像这样将其传递给另一个控制器(参考最后两行): 这不是一个很好的答案,但我经历了同样的问题,没有解决。我将tempdata更改为Session[“rvm”]变量,并成功。考虑从TimDATA到session的旋转。 < P>这是设计的。strong>在Asp.Net core中,不能在TempData中传递复杂类型。您可以传递诸如string、int、Guid等简单类型 如果您绝对希望通过TempData传递复杂类型的对象,则有2个选项 1)将对象序列化
TempData
,以便像这样将其传递给另一个控制器(参考最后两行):
这不是一个很好的答案,但我经历了同样的问题,没有解决。我将tempdata更改为Session[“rvm”]变量,并成功。考虑从TimDATA到session的旋转。 < P>这是设计的。strong>在Asp.Net core中,不能在TempData中传递复杂类型。您可以传递诸如
string
、int
、Guid
等简单类型
如果您绝对希望通过TempData传递复杂类型的对象,则有2个选项
1)将对象序列化为字符串并传递该字符串。
下面是一个使用Json.NET将对象序列化为字符串的示例
var s = Newtonsoft.Json.JsonConvert.SerializeObject(rvm);
TempData["rvm"] = s;
return RedirectToAction("About", "Home");
现在,在您的About
操作方法中,从TempData读取此值,并将其反序列化到您的RegisterViewModel
类对象
public IActionResult About()
{
if (TempData["rvm"] is string s)
{
var rvm = JsonConvert.DeserializeObject<RegisterViewModel>(s);
// use rvm now
}
// to do : return something
}
public IActionResult About()
{
if(TempData[“rvm”]是字符串s)
{
var rvm=JsonConvert.DeserializeObject;
//立即使用rvm
}
//做:归还某物
}
2)将简单类型的字典设置为TempData
var d = new Dictionary<string, string>
{
["FullName"] = rvm.FullName,
["Email"] = rvm.Email;
};
TempData["MyModelDict"] = d;
return RedirectToAction("About", "Home");
var d=新字典
{
[“全名”]=rvm.FullName,
[“电子邮件”]=rvm.Email;
};
TempData[“MyModelDict”]=d;
返回操作(“关于”、“家”);
稍后再读
public IActionResult About()
{
if (TempData["MyModelDict"] is Dictionary<string,string> dict)
{
var name = dict["Name"];
var email = dict["Email"];
}
// to do : return something
}
public IActionResult About()
{
if(TempData[“MyModelDict”]是字典dict)
{
变量名称=dict[“名称”];
var email=dict[“email”];
}
//做:归还某物
}
请显示家庭/注册代码。我编辑了我的问题。看起来是这样的。因为没有更好的解决方案,我想我必须切换到会话。谢谢,谢谢,这就解释了一切。太糟糕了,这么晚了/
var d = new Dictionary<string, string>
{
["FullName"] = rvm.FullName,
["Email"] = rvm.Email;
};
TempData["MyModelDict"] = d;
return RedirectToAction("About", "Home");
public IActionResult About()
{
if (TempData["MyModelDict"] is Dictionary<string,string> dict)
{
var name = dict["Name"];
var email = dict["Email"];
}
// to do : return something
}