使用部分视图传递模型

时间:2014-03-23 04:41:38

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

我想在我的一些表单上显示一个视图,其中显示了从数据库表中读取的警报列表。我想我需要使用局部视图 - 但是没有使用过。

到目前为止,我在共享的视图文件夹中创建了一个名为" _Alerts.cshtml"的部分视图。

在该文件中,目前我只是:

@{
    Layout = null;
}

This is a shared view.

这只是我试图展示的东西。

然后,在我想要显示警报的现有页面上,我有这段代码:

@if (User.Identity.IsAuthenticated)
{
    <div class="row">
        @Html.Partial("~/Views/Shared/_Alerts.cshtml", null)
    </div>
}

这很有效。但是,我的理解是不对的。目前,我没有传递任何模型。部分视图没有控制器吗?目前,我需要创建一个控制器方法 - 在某个地方 - 从我的数据服务中获取警报列表,然后我想格式化并在局部视图中显示它。但我不确定控制器方法在哪里。如果从8个不同的屏幕调用此视图,这些屏幕的8个控制器是否会调用我的警报并格式化它们?

似乎有很多重复。

2 个答案:

答案 0 :(得分:1)

他们不需要重复。

您可以在控制器中定义所需的操作,然后拨打@Html.Action而不是@Html.Partial

在您的操作中,您可以返回部分视图。

public class AlertsController : Controller 
{
   public ActionResult Show()
   {
     var model = GetModel();//decide where this will come from.

     return PartialView("~/Views/Shared/_Alerts.cshtml",model);
   }

}

在布局视图中或您需要使用它的任何位置。你可以简单地称它如下。

@Html.Action("Show","Alerts")

答案 1 :(得分:1)

如果您需要将所有数据传递给partial,那么您可以使用@ Html.Partial并传入模型。

另一方面,如果您想要嵌入的视图来获取数据本身,那么您将使用Html.RenderAction