Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# 使用TempData dictionary可防止重定向操作无法工作_C#_Asp.net Mvc_Controller_Viewmodel - Fatal编程技术网

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
}