2012-10-13 56 views
1

现在我敢打赌,这是一个经常发生的问题,我似乎无法找到与之相关的任何内容,或者注意到自己有什么问题。在底部提供的视图始终在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> 
+0

你可以发布你的“父母”的观点,你试着打电话给你的部分? – nemesv

+0

这是一个局部视图,让我们看看你是如何从父视图调用它,可能是从那里得到空值 –

+0

我已经在问题中发布了父视图。对不起,延迟,但堆栈离线:( – rexdefuror

回答

4

<div id="listC">@Html.Partial("FrontPagePartial")</div>

这是试图使局部视图,FrontPagePartial,与父视图的模型,这是不定义。

public ActionResult FrontPagePartial()

这将创建一个动作,使你可以去,主页/控制器/ FrontPagePartial


你需要做的是

<div id="listC">@Html.Partial("FrontPagePartial", currencies)</div>

如果你不这样做介意ViewBag,您可以在Action方法中设置ViewBag.Currencies,并且可以设置ViewBag.Currencies中的方法和

<div id="listC">@Html.Partial("FrontPagePartial", ViewBag.Currencies)</div>

+0

对不起,迟到的响应。不在我的电脑。我需要离开我的视图文件?在'Shared'文件夹中,或者将它返回到默认路径,就像您提到的'SiteUrl/Controller/FrontPagePartial'? – rexdefuror

+0

对于部分视图,您应该使用_FrontPagePartial。(http:// stackov erflow.com/questions/4576548/why-does-razor-layout-cshtml-have-a-leading-underscore-in-file-name)。如果这个局部视图是在不同的控制器之间共享的,那么把它放在Shared中,否则我认为把它放在它的控制器的视图文件夹中是没问题的。 – user1736525

1

的@ Html.Partial只是使用父拥有模型呈现HTML直接从文件视图部分(在共享文件夹,而不是通过在控制器中FrontPagePartial方法)。在你的情况下,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。操作:

<div id="listC">@Html.RenderAction("FrontPagePartial")</div> 

不要忘记更改FrontPagePartial方法的返回。如果不这样做的结果将是布局页面内货币的列表(你是返回一个简单的页面,而不是一个局部视图):

public ActionResult FrontPagePartial() 
{ 
.... 
return PartialView(currencies); 
}