(Model.CartItems!= null)抛出对象引用未设置为对象的实例我们有什么替代方法可以避免这种情况吗?

时间:2014-03-13 21:15:58

标签: c# asp.net-mvc-4 razor view

我的局部视图中有一个错误:对象引用没有设置为一个对象的实例,我尝试通过添加此行来禁用它,但它似乎无效,因为我得到了前面提到的错误。

如果我在添加的行上放置一个断点(@if(Model.CartItems!= null)),第一次,Model不为null(它包含我选择的项目,我删除它,模型是NULL但IF语句抛出错误对象引用未设置为对象的实例。

我进入我的网上商店,我选择了一个项目,然后我点击了删除这个项目。然后从购物车表中删除该项目。但是视图没有刷新(该项目仍然在屏幕上。但我收到一条消息说ABC项目被删除了。

我添加了这一行,试图避免null的对象引用错误,但似乎不是正确的命令。有什么想法吗?

 @if (Model.CartItems != null)

TableContent.cshtml局部视图

 @model Tp1WebStore3.ViewModels.ShoppingCartViewModel

 @{
    ViewBag.Title = "Table Content";
 }

 <a Id="TableContent" href="#" class="TableContent">
   <table>
     <tr>
        <th>
            Produit
        </th>
        <th>
            Prix (unitaire)
        </th>
        <th>
            Quantite
        </th>
        <th></th>
     </tr>
     @if (Model.CartItems != null)   <====  line which I added
     {

        foreach (var item in Model.CartItems)
        {
           <tr id="row-@item.ProduitId">
               <td>
                   @Html.ActionLink(item.Produit.Description, "Details", "Produit", new { id = 
                   item.ProduitId }, null)
               </td>
               <td>
                   @item.Produit.Prix
               </td>
               <td id="item-count-@item.PanierId">
                   @item.Quantite
               </td>
               <td>
                  <a href="#" class="RemoveLink" data-id="@item.PanierId"> Enlever du panier </a>
               </td>
           </tr>
         }
    }

       <tr>
          <td>
               Total
          </td>
          <td></td>
          <td></td>
          <td id="cart-total">
                @Model.CartTotal
          </td>
       </tr>
     </table>
    </a>
来自Panier的

Index.cshtml

 @model Tp1WebStore3.ViewModels.ShoppingCartViewModel

 @{
     ViewBag.Title = "Shopping Cart";
 }
 <script src="/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>

 <script type="text/javascript">
     $(function () {
         $('.RemoveLink').click(function () {
             $.ajax({
                 url: '/Panier/RemoveFromCart',
                 data: { id: $(this).data('id') },
                 type: 'POST',
                 cache: false,
                 success: function (result) {
                     $('#row-' + result.DeleteId).remove();
                     $('#row-' + result.DeleteId).fadeOut('slow');
                     $('#cart-status').text('Cart (' + result.CartCount + ')');
                     $('#update-message').text(result.Message);
                     $('#cart-total').text(result.CartTotal);
                     $.get('@Url.Action("TableContent", "Panier")')
                          $("#TableContent").html(data); });
                  },
                  error: function(XMLHttpRequest, textStatus, errorThrown) { 
                       alert("Status: " + textStatus); alert("Error: " + errorThrown); 
                  }       
             });
             return false;
         });
     });
 </script>
 <h3>
     <em>Details</em> du panier:
 </h3>
 <p class="button">
     @Html.ActionLink("Checkout >>", "AddressAndPayment", "Checkout")
  </p>  
  <div id="update-message">
  </div>
  <div id="table-content">
      @Html.Partial("TableContent")    <=== partial view call
  </div>

PanierController.cs

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
 using System.Web.Mvc;
 using Tp1WebStore3.Models;
 using Tp1WebStore3.ViewModels;

 namespace Tp1WebStore3.Controllers
 {
     public class PanierController : Controller
     {
         //
         // GET: /Panier/
         Tp1WebStoreDBEntities dbProduit = new Tp1WebStoreDBEntities();

         //
         // GET: /ShoppingCart/
         public ActionResult Index()
         {
             var cart = ShoppingCart.GetCart(this.HttpContext);

             // Set up our ViewModel
             var viewModel = new ShoppingCartViewModel
             {
                 CartItems = cart.GetCartItems(),
                 CartTotal = cart.GetTotal()
             };
             // Return the view
             return View(viewModel);
         }
         //
         // GET: /Store/AddToCart/5
         public ActionResult AddToCart(int id)
         {
             // Retrieve the album from the database
             var addedProduit = dbProduit.Produits
                  .Single(produit => produit.ProduitId == id);

             // Add it to the shopping cart
             var cart = ShoppingCart.GetCart(this.HttpContext);

             cart.AddToCart(addedProduit);

             // Go back to the main store page for more shopping
             return RedirectToAction("Index");
         }
         //
         // AJAX: /ShoppingCart/RemoveFromCart/5
         [HttpPost] 
         public ActionResult RemoveFromCart(int id)
         {
             // Remove the item from the cart
             var cart = ShoppingCart.GetCart(this.HttpContext);

             // Get the name of the album to display confirmation
             string produitDescription = dbProduit.Paniers
                 .Single(item => item.PanierId == id).Produit.Description;

             // Remove from cart
             int itemCount = cart.RemoveFromCart(id);

             // Display the confirmation message
             var results = new ShoppingCartRemoveViewModel
             {
                 Message = Server.HtmlEncode(produitDescription) +
                     " has been removed from your shopping cart.",
                 CartTotal = cart.GetTotal(),
                 CartCount = cart.GetCount(),
                 ItemCount = itemCount,
                 DeleteId = id
             };
             return Json(results);  
         /*    return View("CartSummary");  */
         }
         //
         // GET: /ShoppingCart/CartSummary
         [ChildActionOnly]
         public ActionResult CartSummary()
         {
             var cart = ShoppingCart.GetCart(this.HttpContext);

             ViewData["CartCount"] = cart.GetCount();
             return PartialView("CartSummary");
         }

         public ActionResult TableContent()
         {
              return PartialView("TableContent");
         }
     }
 }

0 个答案:

没有答案