【问题标题】:Asp.Net MVC 5 calling PartialView with a different ModelAsp.Net MVC 5 使用不同的模型调用局部视图
【发布时间】:2015-09-21 20:39:34
【问题描述】:

我想从我的 Index.cshtml 调用一个 PartialView,它使用不同的模型,我想调用 PartialView。

我的索引.cshtml

@model IEnumerable<myappname.Models.Post>
...
@Html.Partial("_Block")

_Block.cshtml

@model myappname.Models.RightBlock
<img src="@Model.blockContent" width="330" />

Controller.cs

...
public PartialViewResult _Block()
    {
        int id = 2;
        RightBlock rb0 = db.RightBlocks.Find(id);

        return PartialView(rb0);
    }
...

请忽略 id,因为我只想静态调用它,而不是动态调用它。 当我运行索引页面时,我得到一个错误:

传入字典的模型项是类型 'System.Data.Entity.Infrastructure.DbQuery`1[myappname.Models.Post]', 但是这本字典需要一个类型的模型项 'myappname.Models.RightBlock'。

如何传递不同的模型来调用 PartialView? 谢谢。

【问题讨论】:

  • 更容易的是你可以使用 ViewBag:@{RightBlock obj = ViewBag.RightBlock as myappname.Models.RightBlock;}
  • 它在我使用时有效:'Html.Partial("_Block", new myappname.Models.RightBlock())' 但是当我再添加 2 个块时,索引页面有效但什么也不显示。来源是这样的: 。没有定义和渲染 src。

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


【解决方案1】:

使用Html.Action

索引.cshtml

@Html.Action("Block")

Controller.cs

public ActionResult Block()
{
   // Your code
   return PartialView("_Block.cshtml");
}

【讨论】:

  • 行得通!谢谢你。只是一个编辑: return PartialView("_Block") 就足够了。
  • 是的,如果它位于WebFormViewEngine 搜索视图的默认目录之一下,您应该只需要视图的名称而不是完整路径(例如“_Partial”而不是“/目录/_Partial.cshtml")。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2015-09-20
  • 2013-06-14
  • 2021-07-16
  • 2013-05-17
  • 1970-01-01
相关资源
最近更新 更多