2012-10-13 61 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); 
}