2017-06-18 5 views
1

Entity Frameworkを使用しているASP.Net MVCアプリケーションで作業していて、モデルから値を表示しようとしました。ASP.Net MVCエンティティフレームワークで空のリストを持つモデルの値が出力されない

I持ってそれ

[Table("bill")] 
    public partial class Bill 
    { 
    [Key] 
    public int BillId { get; set; } 
    [Display(Name = "Bill Number")] 
    public string BillNumber { get; set; } 
    [Display(Name = "Title")] 
    public string Title { get; set; } 

    [ForeignKey("BillId")] 
    public virtual List<BillSubject> Subjects { get; set; } 
} 

とBillSubjectのための以下の定義内BillSubjectsのリストを持っているビルと呼ばれるクラスのために、次のモデル:

[Table("billSubject")] 
public partial class BillSubject 
{ 
    [Key] 
    public int SubjectId { get; set; } 
    public int BillId { get; set; } 
    public string Subject { get; set; } 
} 

コード時のデータを取得するために使用ユーザーが特定の請求書をクリックした場合:このコードにブレークポイントを設定していて、いずれのシナリオでもコードに問題が発生することはありません。

 public ActionResult Bill(int billid) 
     { 
      Bill bill = db.bill.Find(billid); 
      if(bill == null) 
      { 
       return HttpNotFound(); 
      } 
      return View("~/Views/Bill/Bill.cshtml", bill); 
     } 

一部の請求書には件名がありません。エンティティフレームワークを使用すると、オブジェクト内に空のリストが作成されます。 データベースに保存されている件名を持つ請求書にこのページを読み込むと、すべての項目にBillのタイトル項目と件名が表示されます。 しかし、私はどのような科目を持っていないビルでしようとすると、すべてが空にレンダリングされます。私はブラウザでソースを見て、タイトルタグはh3タグであり、テキストはありません。

私はこれを変更する必要があると思っていますか?

ビルビュー:

@model RepresentWebApp.Models.Bill 
@{ 
    ViewBag.Title = "Bill"; 
} 

<h2>Bill</h2> 
<h3>@Html.DisplayName(Model.Title)</h3> 
<h3>@Html.DisplayName(Model.Subjects.Count())</h3> 

全HTML私はページ(私のページヘッダ、基本的にASP.Netのデフォルトを含みます)をロード:そのSubjectにビル用

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>Bill - My ASP.NET Application</title> 
    <link href="/Content/bootstrap.css" rel="stylesheet"/> 
<link href="/Content/site.css" rel="stylesheet"/> 

    <script src="/Scripts/modernizr-2.6.2.js"></script> 


</head> 
<body> 
    <div class="navbar navbar-inverse navbar-fixed-top"> 
     <div class="container"> 
      <div class="navbar-header"> 
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
        <span class="icon-bar"></span> 
       </button> 
       <a class="navbar-brand" href="/">Application name</a> 
      </div> 
     <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li><a href="/">Home</a></li> 
       <li><a href="/Home/About">About</a></li> 
       <li><a href="/Home/Contact">Contact</a></li> 
      </ul> 
       <ul class="nav navbar-nav navbar-right"> 
    <li><a href="/Account/Register" id="registerLink">Register</a></li> 
    <li><a href="/Account/Login" id="loginLink">Log in</a></li> 
</ul> 

     </div> 
    </div> 
</div> 
<div class="container body-content"> 



<h2>Bill</h2> 
<h3></h3> 
<h3>0</h3> 






    <hr /> 
    <footer> 
     <p>&copy; 2017 - My ASP.NET Application</p> 
    </footer> 
</div> 

<script src="/Scripts/jquery-1.10.2.js"></script> 

<script src="/Scripts/bootstrap.js"></script> 
<script src="/Scripts/respond.js"></script> 



<!-- Visual Studio Browser Link --> 
<script type="application/json" id="__browserLink_initializationData"> 
    {"appName":"Chrome","requestId":"410cd4ef6a3c4f1a8a11ad3bd6972ab3"} 
</script> 
<script type="text/javascript" 
src="http://localhost:50287/130502d9b020420c9a2ea324e4312c38/browserLink" 
async="async"></script> 
<!-- End Browser Link --> 

</body> 
</html> 

HTMLを

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<title>Bill - My ASP.NET Application</title> 
<link href="/Content/bootstrap.css" rel="stylesheet"/> 
<link href="/Content/site.css" rel="stylesheet"/> 

<script src="/Scripts/modernizr-2.6.2.js"></script> 


</head> 
<body> 
<div class="navbar navbar-inverse navbar-fixed-top"> 
    <div class="container"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
      </button> 
      <a class="navbar-brand" href="/">Application name</a> 
     </div> 
     <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li><a href="/">Home</a></li> 
       <li><a href="/Home/About">About</a></li> 
       <li><a href="/Home/Contact">Contact</a></li> 
      </ul> 
       <ul class="nav navbar-nav navbar-right"> 
    <li><a href="/Account/Register" id="registerLink">Register</a></li> 
    <li><a href="/Account/Login" id="loginLink">Log in</a></li> 
</ul> 

     </div> 
    </div> 
</div> 
<div class="container body-content"> 



<h2>Bill</h2> 
<h3>A bill to award career pathways innovation grants to local educational agencies and consortia of local educational agencies, to provide technical assistance within the Office of Career, Technical, and Adult Education to administer the grants and support t</h3> 
<h3>1</h3> 






    <hr /> 
    <footer> 
     <p>&copy; 2017 - My ASP.NET Application</p> 
    </footer> 
</div> 

<script src="/Scripts/jquery-1.10.2.js"></script> 

<script src="/Scripts/bootstrap.js"></script> 
<script src="/Scripts/respond.js"></script> 



<!-- Visual Studio Browser Link --> 
<script type="application/json" id="__browserLink_initializationData"> 
{"appName":"Chrome","requestId":"cf9f70c608384cdb941887f9887ca6c2"} 
</script> 
<script type="text/javascript" src="http://localhost:50287/130502d9b020420c9a2ea324e4312c38/browserLink" async="async"></script> 
<!-- End Browser Link --> 

</body> 
</html> 
+1

uが行方不明ARNTリストを反復する必要がList<Subjects>で件名を表示するには「)」あなたのコードの最後の行では? –

+1

最終HTMLをブラウザに入れて投稿してください。 –

+0

データを取得しているコードを投稿できますか? –

答えて

0

しかし、W:手形のタイトルをロードします私は何も対象がないBillを試してみると、すべてが空になります。私はブラウザでソースを見て、タイトルタグはh3タグであり、テキストはありません。

あなたは、彼らはその後、モデルに存在しないときのカウントを表示したくない場合は、同様にすべての

@if(Model.Subjects.Count != 0) { //markup here }

でマークアップを表示したくない場合は、次の @if(Model.Subjects.Count() != 0) @Model.Subjects.Count()をあなたはこの名前ではなく表示されます @Html.DisplayNameFor(a=>a.Title); フィールドの名前を表示したい場合は これは値

が表示されますフィールドの内容

フィールドの内容をモデルに入れる場合@Html.DisplayName(Model.Subjects); これはフィールド@Model.Subjectsの内容を表示します。

あなたは

`@{ 
    if (Model.Subject != Null) { 
     foreach (var item in Model.Subjects){ 
      <h3> @item.Subject <h3> 
     } 
    } 
}` 
関連する問題