2016-09-06 16 views
0

レンダリングパーシャルの問題が発生しています。私は周りを見回し、部分的なビューへのパスを最初のパラメータとして渡し、モデルを2番目のパラメータに渡すことになっていることがわかりました。私は何も吹き飛ばすことなく、ページを取得していますが、部分的なビューは私の期待された結果を出力していない、私はその部分的にブレークポイントを打つことはできません(ループを使用している)。私はそれにデータを含むモデルを渡していることを確認しましたが、部分的にはヒットしないようです。ここに私のコントローラとパーシャルがあります。レンダリング一部がレンダリングされていません。.NET mvc

DataBass db = new DataBass(); 

    public ActionResult Address() 
    { 
     Models.ViewModels.CheckoutViewModel x = new Models.ViewModels.CheckoutViewModel(); 

     if (User.Identity.IsAuthenticated) 
     { 
      using(DataBass oDB = new DataBass()) 
      { 
       var Customer = oDB.Customers.First(c => c.Email.ToLower() == User.Identity.Name.ToLower()); 
       var AvailableAddresses = oDB.AddressBooks.Where(ab => ab.CustomerID == Customer.ID).ToList(); 
       x.CustomerID = Customer.ID; 
       x.HasExistingAddresses = (AvailableAddresses.Count > 0 ? false : true); 
       x.AvailableAddresses = AvailableAddresses; 


      } 
      //var UserAddresses = db.AddressBooks.Where(a => a.Customer.Email == User.Identity.Name); 
      //ViewBag.Addresses = UserAddresses; 
      return View("Shipping", x); 
     }     
     else 
      return View("Index"); 
    } 

ここで私は問題を抱えています。これはヒットしないことです。

@model IEnumerable<Models.AddressBook> 

<h2>AddressBook</h2> 

<table class="table"> 
    <tr> 
     <th> 
      Address 2 
     </th> 
     <th> 
      Address 1 
     </th> 
     <th> 
      City 
     </th> 
     <th> 
      State 
     </th> 
     <th> 
      Postal Code 
     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     var states = (List<Models.State>)ViewBag.States; 

     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.Address1) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Address2) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.City) 
      </td> 
      <td> 
       @states.FirstOrDefault(x => x.ID.ToString() == item.StateID).Name 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Zipcode) 
      </td> 
      <td> 
       @Html.ActionLink("Choose this one","", new { id = item.ID}, new { @class="button"}) 
       @*@Html.ActionLink("Edit", "EditAddress", new { id = item.ID }, null) | 
       @Html.ActionLink("Delete", "DeleteAddress", new { id = item.ID }, null) 

       @*<a href="/Account/EditAddress/@item.AddressBook_ID">Edit</a> | 
        <a href="/Account/DeleteAddress/@item.AddressBook_ID">Delete</a> 
       @Html.ActionLink("Edit", "EditAddress", new { id = item.ID }, null) | 
       @Html.ActionLink("Edit", "EditAddress", "Account",new { id=item.AddressBook_ID }, htmlAttributes: null) | 
       @Html.ActionLink("Delete", "DeleteAddress", new { id = item.ID }, null)*@ 
      </td> 
     </tr> 
    } 

</table> 

そしてここで上記に示す部分ChooseExistingAddress.cshtmlへれるrenderPartialメソッドを呼び出している私の見解です。

@model Models.ViewModels.CheckoutViewModel 

@{ 
    ViewBag.Title = "Shipping Selection"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Shipping</h2> 
@if (Model.HasExistingAddresses) 
{ 
    Html.RenderPartial("~/Views/Checkout/ChooseExistingAddress.cshtml", Model.AvailableAddresses); 

} 
else 
{ 
    Html.RenderPartial("~/Views/Checkout/AddNewShippingAddress.cshtml"); 
} 
+1

変更「〜/ビュー/チェックアウト/ ChooseExistingAddress.cshtml」が「ChooseExistingAddress」、「チェックアウト」 – JB06

+0

はHtml.RenderPartial(「ChooseExistingAddress」にそれを修正、モデル:ちょうどブール式の結果に設定します.AvailableAddresses);私はまだ同じ結果を得ています。ビュー、コントローラ、モデルのオーバーロードはありません。 – ddeamaral

+0

部分的に見ると、無効なひげ剃りのコメントがあり、最初の編集リンクの隣にオープニングコメントがありますが、一致する終了タグはありません – JB06

答えて

3

あなたは後方あなたの3値論理を持っている:つまり

x.HasExistingAddresses = (AvailableAddresses.Count > 0 ? false : true); 

を、アドレスのカウントが0より大きい場合、あなたは一方で、それは本当である必要があり、これをfalseに設定していますその場合、とにかく、ここでは三項は本当に必要ありません。

x.HasExistingAddresses = AvailableAddresses.Count > 0; 
+0

LINQのAnyメソッドを使用すると、さらに単純化できます。 AvailableAddresses.Any()。 Countプロパティを使用する方が速くなりますが、目立つ差異があることは疑いありません。 – JB06

+0

これはうまくいきました。ありがとう、私の部分で初心者の間違いだった。 – ddeamaral

関連する問題