[英]Partial View returning null model
现在,我敢打赌,这是一个经常发生的问题,我似乎找不到与之相关的任何东西,或者注意到自己的问题所在。 底部提供的视图始终在foreach
行上返回null。
我正在制作一个简单的货币清单。
模型:
public class Currency
{
public int ID { get; set; }
public string Name { get; set; }
public string Sign { get; set; }
public float BuyValue { get; set; }
public float MidValue { get; set; }
public float SellValue { get; set; }
public string CurrencyIcon { get; set; }
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
public DateTime DateCreated { get; set; }
}
可以这样说,它应该以部分视图的形式发布。 例如,部分视图将获得所有这些(今天),部分视图将获得随机6(今天也)。
今天,我现在正在做第一部分。
控制者
public ActionResult FrontPagePartial()
{
DateTime today = DateTime.Now.Date; //i'm filtering it by date only
var currencies = db.Currencies.Where(c => c.DateCreated.Equals(today));
return View(currencies);
}
我检查了过滤器是否正常工作。 所以我的看法是这样的:
@model IEnumerable<CurrencyList.Models.Currency>
<div id="currencyList_Partial">
<div id="bg_currencyList_Partial">
<img src="@Url.Content("~/Content/Resources/img.png")" />
</div>
<div id="header_currencyList_Partial">
<div style="padding: 10px;">
<p style="font-size: 18px;">
Currency List<br />
<span class="header_currencyList_Partial_Day">FOR TODAY</span>
</p>
<p class="header_currencyList_Partial_Link" >
<a href="#">DETAILS ></a>
</p>
</div>
<div id="table_currencyList">
@foreach (var item in Model)
{
<table>
<tr>
<td style="text-align: center;"><img src='@item.CurrencyIcon' title='@item.Sign' /><p style="font-size: small;">@Html.DisplayFor(modelItem => item.Name)</p><p>@Html.DisplayFor(modelItem => item.Sign)</p></td>
<td style="text-align: center;">@Html.DisplayFor(modelItem => item.BuyValue)</td>
<td style="text-align: center;">@Html.DisplayFor(modelItem => item.MidValue)</td>
<td style="text-align: center;">@Html.DisplayFor(modelItem => item.SellValue)</td>
</tr>
</table>
}
</div>
</div>
</div>
父视图
@{
ViewBag.Title = "Currency List Home Page";
}
@section HeadSection{
<link rel="stylesheet" href="@Url.Content("~/Content/layerslider.css")" type="text/css" media="screen" />
<link rel="stylesheet" href="@Url.Content("~/Content/defaultskin/skin.css")" type="text/css" media="screen" />
<noscript>
<link rel="stylesheet" href="@Url.Content("~/Content/noscript.css")" type="text/css" media="screen" />
</noscript>
}
@section ScriptSection{
<script src="@Url.Content("~/Scripts/jqueryui.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/plugins.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/page.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/layerslider.kreaturamedia.jquery.js")" type="text/javascript"></script>
}
<div id="content">
<div id="statusbar"></div>
<div id="slider">
<div id="layerslider">
<div class="ls-layer" style="slidedelay: 3000">
<img class="ls-bg" src="@Url.Content("~/Content/images/slider_gallery/slide1_layer1.png")" alt="layer" />
<img class="ls-s2" src="@Url.Content("~/Content/images/slider_gallery/behind_text_layer.png")" alt="sublayer" style="durationin: 0; top: 247px;/*easingin: easeOutElastic*/" />
<img class="ls-s3" src="@Url.Content("~/Content/images/slider_gallery/text_layer1.png")" alt="sublayer" style="durationin: 2000; top: 255px;left: 15px; easingin: easeOutElastic " />
</div>
<div class="ls-layer" style="slidedelay: 3000">
<img class="ls-bg" src="@Url.Content("~/Content/images/slider_gallery/slide2_layer1.png")" alt="layer" />
<img class="ls-s2" src="@Url.Content("~/Content/images/slider_gallery/behind_text_layer.png")" alt="sublayer" style="durationin: 0; top: 247px;/*easingin: easeOutElastic*/" />
<img class="ls-s3" src="@Url.Content("~/Content/images/slider_gallery/text_layer1.png")" alt="sublayer" style="durationin: 2000; top: 255px;left: 15px;easingin: easeOutElastic " />
</div>
<div class="ls-layer" style="slidedelay: 3000">
<img class="ls-bg" src="@Url.Content("~/Content/images/slider_gallery/slide3_layer1.png")" alt="layer" />
<img class="ls-s2" src="@Url.Content("~/Content/images/slider_gallery/behind_text_layer.png")" alt="sublayer" style="durationin: 0;top: 247px;" />
<img class="ls-s3" src="@Url.Content("~/Content/images/slider_gallery/text_layer1.png")" alt="sublayer" style="durationin: 2000; top: 255px; left: 15px; easingin: easeOutElastic " />
</div>
</div>
</div>
<div id="converter">
<h2>CONVERTER</h2>
<p class="shadowedText">
VALUE:
</p>
<p>
<input type="text" id="tb11" class="tb11" />
</p>
<p class="shadowedText">
FROM CURRENCY
</p>
<div class="select1 select1p">
<select id="select1">
<option>EUR - EURO</option>
<option> $ - DOLLAR</option>
</select>
<span class="selectArrow"><img src="@Url.Content("~/Content/images/select_arrows.png")" /></span>
</div>
<p class="shadowedText">
TO CURRENCY
</p>
<div class="select1 select1p">
<select id="select2">
<option> $ - EURO</option>
<option> EURO - DOLLAR</option>
</select>
<span class="selectArrows"><img src="@Url.Content("~/Content/images/select_arrows.png")" /></span>
</div>
<div class="select1p addMargin">
<span class="boldResult">100 EUR = 11710.55 $</span><br />
<span class="lightResult">100 $ = 0.84882 EUR</span>
</div>
</div>
</div>
<div id="lowerContent">
<div id="blog"><img src="@Url.Content("~/Content/images/vesti.png")" /></div>
//This is where Partial View is rendered
<div id="listC">@Html.Partial("FrontPagePartial")</div>
</div>
<div id="portals">
</div>
<div id="listC">@Html.Partial("FrontPagePartial")</div>
这试图使用未定义的父视图模型呈现部分视图FrontPagePartial。
public ActionResult FrontPagePartial()
这将创建一个操作,以便您可以进行操作,siteurl / controller / FrontPagePartial
您需要做的是
<div id="listC">@Html.Partial("FrontPagePartial", currencies)</div>
如果您不介意使用ViewBag,则可以在Action方法中设置ViewBag.Currencies
<div id="listC">@Html.Partial("FrontPagePartial", ViewBag.Currencies)</div>
@ Html.Partial使用父级拥有的模型直接从文件视图(在Shared文件夹中,而不是通过控制器中的FrontPagePartial方法)直接呈现html局部。 在您的情况下,Razor尝试从父视图使用模型,但是显然您从未定义过它。 这就是空对象的原因
@foreach (var item in Model) { ... }
您想要调用返回另一种对象模型的局部视图; @ Httml.Partial或@ Html.RenderPartial无法实现。 两种解决方案:
Ajax呼叫:
$(document).ready(function() {
$.get('@Url.Action("FrontPagePartial")',null,function(data) {
$('#listC').html(data);
});
});
使用Html.RenderAction或Html.Action:
<div id="listC">@Html.RenderAction("FrontPagePartial")</div>
不要忘记在FrontPagePartial方法中更改返回值。 没有这个,结果将是布局页面内的货币列表(您将返回一个简单页面,而不是局部视图):
public ActionResult FrontPagePartial()
{
....
return PartialView(currencies);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.