【问题标题】:How to pass Model from a view to a partial view?如何将模型从视图传递到局部视图?
【发布时间】:2010-05-05 18:38:27
【问题描述】:

我有一个非强类型的视图。但是,我在这个视图中有一个强类型的局部视图。

如何将模型传递给这个强类型视图?

我尝试了类似的东西

 public ActionResult Test()
        {
              MyData = new Data();
              MyData.One = 1;
              return View("Test",MyData)
        }

在我的测试视图中

<% Html.RenderPartial("PartialView",Model); %>

这给了我一个 stackoverflow 异常。所以我不确定如何传递它。当然,如果可能的话,我不想让测试视图成为强类型,因为如果我在该视图中有 10 个强类型的部分视图,我需要某种包装器。

【问题讨论】:

  • 你对包装器的看法是对的,这不是一个坏方法

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


【解决方案1】:

您应该扩展您的模型,以便它可以为视图提供所有必要的字段(这称为 ViewModel),或者您可以通过 ViewData 单独提供它们。

 public ActionResult Test()
        {
              MyData = new Data();
              MyData.One = 1;
              ViewData["someData"]=MyData;
              return View();
        }

然后:

<% Html.RenderPartial("PartialView",ViewData["someData"]); %>

ViewData 是一个不错的类型化字典

【讨论】:

  • 什么意思?如果您的局部视图是使用 MyData 类强类型的,那么上面的行将毫无问题地呈现您的视图。如您所见,您通过 ViewData 将多个模型发送到您的视图中,因为它不是强类型的,然后您为每个强类型的 PartialView 拉取模型。
  • 我试过这个,但对我不起作用,所以我尝试了@Html.Partial,发现它对我有用。我不知道为什么会这样。
【解决方案2】:

将partial需要的object放入Viewdata中,在view中使用ist作为partial的输入。

public ActionResult Test()
        {
              ViewData["DataForPartial"] = new PartialDataObject();
              return View("Test")
        }

在视图中使用:

<% Html.RenderPartial("PartialView",ViewData["DataForPartial"]); %>

但无论如何:没有理由不使用强类型视图。

【讨论】:

  • 问题不在于视图是强类型视图,而是如果您在该视图中有多个部分视图,则无法使其成为适合所有这些视图的强类型视图除非您制作某种包装器,否则我想使用 ViewData。
猜你喜欢
  • 1970-01-01
  • 2019-02-01
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多