【问题标题】:What populate ViewData["content"] or ViewData["Header"]填充 ViewData["content"] 或 ViewData["Header"] 的内容
【发布时间】:2019-02-19 14:31:58
【问题描述】:

我遇到了一段我看不懂的代码。我们正在使用 foreach 遍历 ViewData["Content"],但我看不到它是从哪里填充的。当我们在生产中遇到错误时出现问题,但是当我尝试在本地调试时它工作正常。我签入了应用程序并且 ViewData["Content"] 没有在任何地方设置 我有类似的东西

foreach (var contentType in (List<AppCode.ContentType>)ViewData["Content"]){ ....}

任何人都可以遮光吗?

我期待看到类似的东西 ViewData[“content”] ="blablaba"ViewData[“Header”]="lalalal" 但我在应用程序的任何地方都看不到它。

【问题讨论】:

  • ViewData 用于在控制器和视图之间传递信息。它必须从返回视图的控制器上的 ActionMethod 的某些执行路径中获取其值。如果没有您提供更多代码,就不可能再深入挖掘。
  • 谢谢,但这就是我问这个问题的原因,基本上没有设置 ViewData["Content"] 的位置。像 ViewData["Content"] = "blablabla"。所以我想知道 ViewData[“content”] 或 ViewData[“Header”] 是 MVC 类型的属性
  • 我不知道默认 MVC 实现中设置 ViewData 的任何内容。如果它被设置,它一定来自您代码中的某个地方,或者来自您正在使用的某个 3rd-party 库。无论哪种方式,我们都看不到您的代码,所以我们真的帮不上什么忙。
  • 谢谢,没关系。出乎意料的是,向当前上下文添加某些内容是否会将其添加到视图数据中?

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


【解决方案1】:

作为described hereViewData 是一个字典,包含在控制器和视图之间传递的数据。

这主要在Controller 方法中设置,如下所示:

ViewBag.Content = "some text";

或者像这样:

ViewData["Content"] = "some text";

ViewDataViewBag 用于相同的目的——将数据从控制器传输到视图。 ViewData 只不过是一个对象字典,它可以通过字符串作为键来访问。它们用于从 Controller -> View -> PartialView

访问相同的值

两者都是ViewPage 类的一部分。

因此,根据代码的其他部分,您应该寻找用于呈现视图的 控制器方法,或将部分呈现为 ViewBag 的 视图和 ViewData 可以作为参数传递。

【讨论】:

  • 我知道,但这就是为什么我要问我找不到任何设置它的地方
  • 好吧,没有设置值的代码,ViewData中就没有默认值,所以代码中肯定有一些setter。没有更多信息,很难说出更多信息
【解决方案2】:

也许某处的某些“内容”或“标题”属性上有一个 [ViewData] 属性。这可从 ASP.Net Core 2.1 获得。

public class HomeController : Controller
{
    [ViewData]
    public string Title { get; set; }

    public IActionResult About()
    {
        Title = "About Us";
        ViewData["Message"] = "Your application description page.";

        return View();
    }
}

https://docs.microsoft.com/en-us/aspnet/core/mvc/views/overview?view=aspnetcore-2.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多