(Model.CartItems!= null)抛出对象引用未设置为对象的实例我们有什么替代方法可以避免这种情况吗? [英] (Model.CartItems != null) Throwing Object reference not set to an instance of an object do we have any alternative to avoid this?

查看:55
本文介绍了(Model.CartItems!= null)抛出对象引用未设置为对象的实例我们有什么替代方法可以避免这种情况吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I have an error in my partial view : Object reference not set to an instance of an object which I tried to bybpass by adding this line but it seems not working because I got the previous mentionned error.

If I put a break point on the added line (@if (Model.CartItems != null)), the first time, the Model is not null (it contains the item I choose, I deleted it, the Model is NULL but the IF statement throw the error Object reference not set to an instance of an object.

I go in my web store, I selected an item and I clicked remove this item. The item is then deleted from the cart table. But the view is not refreshing (the item is still on the screen. But I received a message saying the item ABC was deleted.

I added this line to try to avoid the object reference error for null but doesn't seems to be the proper command to use. Any idea ?







TableContent.cshtml partial view







@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>







Index.cshtml from Panier







<pre> @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>
     Details 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");
        }
    }
}

推荐答案

(function(){
(function () {


' 。RemoveLink')。click(function(){
('.RemoveLink').click(function () {


.ajax({
url:' / Panier / RemoveFromCart '
数据:{id:
.ajax({ url: '/Panier/RemoveFromCart', data: { id:


这篇关于(Model.CartItems!= null)抛出对象引用未设置为对象的实例我们有什么替代方法可以避免这种情况吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆