【问题标题】:asp.net MVC RC1 RenderPartial ViewDataDictionaryasp.net MVC RC1 RenderPartial ViewDataDictionary
【发布时间】:2023-03-17 06:05:01
【问题描述】:

我正在尝试使用ViewDataDictionaryViewData 对象从母版页传递到视图用户控件。

问题是ViewDataDictionary 没有在视图用户控件中返回任何值,无论我尝试哪种方式。

下面的示例代码使用匿名对象只是为了演示,尽管此方法或传递ViewData 对象都不起作用。

以下是我尝试使用的 RenderPartial 辅助方法:

<% Html.RenderPartial("/Views/Project/Projects.ascx", ViewData.Eval("Projects"), new ViewDataDictionary(new { Test = "Mark" })); %>

在我看来,用户控件我执行以下操作:

<%= Html.Encode(ViewData["Test"]) %>

为什么这不返回任何东西?

感谢您的帮助。

编辑:

我能够毫无问题地传递和访问强类型模型。这是ViewDataDictionary,我试图用它来传递模型之外的单个值...

【问题讨论】:

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


    【解决方案1】:

    这是我见过的最简洁的方法:

    <% Html.RenderPartial("/Views/Project/Projects.ascx", Model, new ViewDataDictionary{{"key","value"}});%>
    

    这可能有点骇人听闻,但它可以让您通过和一些额外的数据发送模型。

    【讨论】:

      【解决方案2】:

      不知道是否还有人关心,但我为 ViewDataDictionary 使用了 KeyValuePair。

       <% Html.RenderPartial("ItemRow", item, new ViewDataDictionary{
              new KeyValuePair<string, object>("url", url),
              new KeyValuePair<string, object>("count", count),
              new KeyValuePair<string, object>("className", className)
       }); %>
      

      这样您就可以在一个语句中编写所有内容。可以通过以下方式在视图中访问 KVP:

      <%= ViewData["url"] %>
      <%= ViewData["count"] %>
      <%= ViewData["className"] %>
      

      虽然我通过模型传递的内容可以通过模型访问。*

      【讨论】:

        【解决方案3】:

        我使用的是 ASP.Net MVC 的 RTM 版本,但使用的是:

        <% Html.RenderPartial("~/Views/Project/Projects.ascx", new ViewDataDictionary(new {Key = "Some value"})); %>
        

        在局部视图中引用值时尝试以下操作:

        <%= ViewData.Eval("Key") %>
        

        这似乎对我有用。如果您这样做,它也将起作用:

        <% Html.RenderPartial("~/Views/Project/Projects.ascx", new {Key = "Some value"}); %>
        

        希望这会有所帮助。

        【讨论】:

          【解决方案4】:

          你试过了吗:

          <% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData); %>
          

          在您通过之前,您是否已验证 ViewData["Test"] 是否在 ViewData 中?另请注意,在将 ViewData 传递给 Partial Control 时,保持模型相同很重要。

          尼克

          【讨论】:

          • 谢谢,但我可以毫无问题地通过模型。这是我试图用来传递模型外部的单个值的 ViewDataDictionary..
          【解决方案5】:

          在您的主视图中:

          <% Html.RenderPartial("~/Views/Project/Projects.ascx", ViewData["Projects"]); %>
          

          在您的控制器或您的主视图中:

          ViewData["Test"] = "Mark";
          

          如果您没有在 RenderParttail 中指定模型或视图数据字典,它将使用包含视图中的那些。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-05-26
            • 2010-10-05
            • 1970-01-01
            • 1970-01-01
            • 2010-11-10
            相关资源
            最近更新 更多