【问题标题】:PartialView getting data only for one ViewPartialView 只为一个 View 获取数据
【发布时间】:2016-12-17 11:53:11
【问题描述】:

大家好,我正在使用 asp mvc4 构建网站,我在视图中遇到了问题 首先,我的 _Layout 视图为标题调用了一个 partialView,而我的部分视图正在从模型中获取数据以填充标题中的一些数据, 它只是在主(索引)视图中工作,但移动到另一个视图只是调用部分视图而不从数据库中获取数据。 希望我解释得很好:D

_layout 视图

@model MvcApplication1.Models.SchoolInfo
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">

<title>@Html.DisplayFor(model => model.SiteName)</title>

<!-- Bootstrap Core CSS -->
<link href="~/Content/Template/css/bootstrap.min.css" rel="stylesheet">

<!-- Custom CSS -->
<link href="~/Content/Template/css/business-casual.css" rel="stylesheet">

<!-- Fonts -->
<link href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Josefin+Slab:100,300,400,600,700,100italic,300italic,400italic,600italic,700italic" rel="stylesheet" type="text/css">

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
    <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<body>
    <header>
        <section id="login">
                    @Html.Partial("_LoginPartial")
            @if (Request.IsAuthenticated)
            {
                    @Html.Partial("_SiteHeaderPartial")                            
                
            }
                </section>
    </header>
    @RenderBody()
    @if (Request.IsAuthenticated){
    <footer>
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <p>Copyright &copy; Your Website footer</p>
            </div>
        </div>
    </div>
</footer>
    }
<!-- jQuery -->
<script src="~/Scripts/Template/js/jquery.js"></script>

<!-- Bootstrap Core JavaScript -->
<script src="~/Scripts/Template/js/bootstrap.min.js"></script>

<!-- Script to Activate the Carousel -->
<script>
$('.carousel').carousel({
    interval: 5000 //changes the speed
})
</script>

_SiteHeaderPartial

@model MvcApplication1.Models.SchoolInfo
<div class="brand">@Html.DisplayFor(model => model.SchoolName)</div>
<div class="address-bar">Country | Address : @Html.DisplayFor(model => model.SchoolAddress) | 011 @Html.DisplayFor(model => model.SchoolPhone)

Index 和 About 视图相同(空)。

【问题讨论】:

  • 调试你的代码并检查你的数据库是否被第二次命中。
  • 它只在一个视图中获取数据索引视图,转到另一个视图调用所有内容但数据不显示,返回索引视图将获取数据
  • 粘贴页面索引和其他页面的截图
  • @Html.Partial() 不调用服务器方法来获取数据。为此,您需要@Html.Action()。但是布局永远不应该包含模型的声明,除非它是使用该布局的所有其他视图派生的基本模型形式
  • 您还需要删除 &lt;title&gt;@Html.DisplayFor(model =&gt; model.SiteName)&lt;/title&gt; 以及您在布局文件中引用 @Model 的任何其他位置

标签: asp.net-mvc-4 asp.net-mvc-partialview


【解决方案1】:

如果您没有在 About.cshtml 视图中看到详细信息,那是因为您没有将 SchoolInfo 模型传递给该视图(或者模型未填充数据)。但是,布局不应包含模型声明(除非它是使用该布局的所有视图派生的基本模型)。

从布局中删除@model MvcApplication1.Models.SchoolInfo,而不是@Html.Partial("_SiteHeaderPartial"),使用

@Html.Action("SiteHeader", "yourControllerName")

其中SiteHeader() 是一个控制器方法,用于获取您的数据并返回部分视图,例如

[ChildOnlyAction]
public PartialViewResult SiteHeader()
{
    SchoolInfo model = ... // populate your model
    return PartialView("_SiteHeaderPartial", model);
}

Sife 注意:您还需要删除 &lt;title&gt;@Html.DisplayFor(model =&gt; model.SiteName)&lt;/title&gt; 或将其替换为(例如)&lt;title&gt;@ViewBag.Title&lt;/title&gt;,并在每个视图中,使用 @{ ViewVag.Title = someValue; } 将值传递给部分

【讨论】:

  • 感谢斯蒂芬的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多