Asp.net mvc ViewData、@Html.ViewData和@Ajax.ViewData之间有什么区别?

Asp.net mvc ViewData、@Html.ViewData和@Ajax.ViewData之间有什么区别?,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,viewdata,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,Viewdata,我试着去了解更多的细节,如果有人知道它为什么会这样 控制器动作 public ActionResult TestView() { ViewData["UserInfoData"] = "From User Info Action"; return View(); } 查看(TestView.cshtml) @{ ViewBag.Title=“UserInfo”; ViewData[“User

我试着去了解更多的细节,如果有人知道它为什么会这样

控制器动作

public ActionResult TestView()
        {
            ViewData["UserInfoData"] = "From User Info Action";            
            return View();
        }
查看(TestView.cshtml)

@{
ViewBag.Title=“UserInfo”;
ViewData[“UserInfoData”]=“这就是问题所在”;
}
@Html.ViewData[“UserInfoData”].ToString()

@Ajax.ViewData[“UserInfoData”].ToString()
@ViewData[“UserInfoData”].ToString()
当我执行上述操作时,它返回的视图和输出如下所示
来自用户信息操作
来自用户信息操作
这就是问题所在

为什么@Html.ViewData和@Ajax.ViewData指向与ViewData不同的ViewData?那有什么用

同样在上面的view@ViewBag.Title中,我可以访问view@ViewData[“Title”],但不能使用@Html和@Ajax。它似乎指向不同的ViewDataDictionary,该ViewDataDictionary是从控制器创建或传递的,而不是从控制器传递的 那个更新了吗

我试图查看详细信息,发现@Html和@Ajax都依赖于ViewDataContainer,它指向一些编译cshtml类,什么是ViewDataContainer?那有什么用

dotnetfiddle链接:


您显示的代码将输出此问题3次(不是来自用户信息操作)。为什么
@Html.ViewData
@Ajax.ViewData
指向不同的数据他们没有,甚至你自己的代码也证明了这是我自己的代码。我使用的是MVC5。我添加了代码和输出的屏幕截图。我也是,我剪切了一个粘贴好的代码,它输出了3个相同的结果。这就是问题所在。除非您有其他代码导致问题,否则您的声明根本不可能是哪个MVC版本?5.2.3中的确切DLL版本。因此,最初所有的
ViewData
s都指向同一个对象,但在进行更改时它们会被克隆。您显示的代码将输出三次这是问题所在(不是来自用户信息操作)。为什么
@Html.ViewData
@Ajax.ViewData
指向不同的数据他们没有,甚至你自己的代码也证明了这是我自己的代码。我使用的是MVC5。我添加了代码和输出的屏幕截图。我也是,我剪切了一个粘贴好的代码,它输出了3个相同的结果。这就是问题所在。除非您有其他代码导致问题,否则您的声明根本不可能是哪个MVC版本?5.2.3中的确切DLL版本。因此,最初所有的
ViewData
s都指向同一个对象,但在进行更改时它们会被克隆。
@{
    ViewBag.Title = "UserInfo";
    ViewData["UserInfoData"] = "This is the problem";    
}

@Html.ViewData["UserInfoData"].ToString()
<br />
@Ajax.ViewData["UserInfoData"].ToString()
<br />
@ViewData["UserInfoData"].ToString()