c# - mvc model null reference -


in web application strange going on , can not find cause. please me or provide me idea how solve challenge. same code works in cases other null reference exception. in controller model specific category db. then, in view list products category. when select products list , press button 'to shopping cart', model passed/transferred controller correctly , products in model null.

my controller actions:

    [httpget]     [paccheckpermissionattribute(pacpermissionrecordenum.perm_pubmatorder)]     public actionresult paccategorydetails(int categoryid)     {         category category = _categoryservice.getcategorybyid(categoryid);         if(category == null || category.deleted || !category.published)             return redirecttoroute("homepage");           categorymodel model = preparecategorymodel(category, false);         return view(model);     }      [httppost]     [paccheckpermissionattribute(pacpermissionrecordenum.perm_pubmatorder)]     public actionresult paccategorydetails(categorymodel model)     {         category category = _categoryservice.getcategorybyid(model.id);         if (category == null || category.deleted || !category.published)             return redirecttoroute("homepage");          //add selected products shoppingcart         (int = 0; < model.products.count; i++)         ... 

model.products null , correct - don't know why??? view:

    @model categorymodel     @using nop.web.models.catalog;     @using nop.core.domain.orders;     @using nop.web.framework;     @using nop.web.models.shoppingcart;     @using paccontrols;     @using telerik.web.mvc.ui;     @{         html.appendscriptparts(@url.content("~/administration/scripts/jquery.validate.unobtrusive.min.js"));         html.appendscriptparts(@url.content("~/administration/scripts/jquery.validate.min.js"));         html.appendscriptparts(@url.content("~/administration/scripts/jquery.unobtrusive-ajax.min.js"));         layout = "~/views/shared/_pacloggedin.cshtml";     }     @section sidebar     {         @html.action("paccategorynavigation", "catalog", new { currentcategoryid = model.id})     }     @using (html.beginform())     {         <div class="productdetails-page">             <div class="body">                 <div class="info-row">                     <div class="productlist-content">                         <div class="info-row">                             <div class="box border-r box-s info-row category-details">                                 <!-- <div class="f-l" style="width: 320px;">@html.partial("_productdetailspictures", model)</div> -->                                 <div class="f-l" style="width: 360px;"><h1>@html.displaytextfor(x => model.name)</h1>                                                  @html.raw(model.description)                                                  @html.hiddenfor(x => model.id)                                 </div>                                 <div class="f-c"></div>                             </div>                             <div class="f-c"></div>                         </div>                         <div class="f-c"></div>                          @if (model.products.count > 0)                         {                             <div class="titelbox border-top-r-l full-row darkgrey-background">                                 <div class="page-title">                                     <h3>@t("pac.promotionmaterial")</h3>                                 </div>                             </div>                             <div class="box border-bottom-r-l info-row">                                 <div class="osc-data">                                     <div class="osc-table">                                         <div class="mm-items">                                         @for (int = 0; < model.products.count; i++)                                         {                                             if (!model.products[i].isdownload)                                             {                                                 <div class="mm-row" id="@(i)">                                                     @html.hiddenfor(x => model.products[i].id)                                                     <div class="mm-col quanity-col">                                                         <div>                                                             @html.editorfor(x => model.products[i].quantity)                                                             @html.validationmessagefor(x => model.products[i].quantity)                                                         </div>                                                          </div>                                                     <div class="mm-col name-col">                                                         <div id="name_@(i)">                                                             @html.displaytextfor(x => model.products[i].name)                                                         </div>                                                     </div>                                                     <div class="mm-col price-col">                                                         <div>                                                             <div id="price_@(i)" class="price-col">@html.displaytextfor(x => @model.products[i].productprice.price)</div>                                                              <input type="hidden" id="pricevalue_@(i)" value="@(model.products[i].productprice.pricevalue)"/>                                                         </div>                                                         </div>                                                     <div class="f-c"></div>                                                 </div>                                             }                                         }                                         </div>                                     </div>                                 </div>                             </div>                         }                             @if (model.products.count > 0)                             {                             <div class="titelbox border-top-r-l full-row darkgrey-background">                                 <div class="page-title">                                     <h3>@t("pac.download")</h3>                                 </div>                             </div>                             <div class="box border-bottom-r-l info-row">                                 <div class="osc-data">                                     <div class="osc-table">                                         <div class="mm-items">                                         @for (int = 0; < model.products.count; i++)                                         {                                             if (model.products[i].isdownload)                                             {                                                 <div class="mm-row" id="@(i)">                                                     <div class="mm-col downloadname-col">                                                         <div>                                                             @html.displaytextfor(x => model.products[i].name)                                                         </div>                                                     </div>                                                     <div class="mm-col downloadbutton-col">                                                         @if (model.products[i].isdownload)                                                         {                                                             @html.smallbutton(t("pac.button.download").text, buttonstyle.default, "location.href = '" +url.routeurl("getproductdownload", new { productvariantid = model.products[i].productvariantid }) + "';return false;" , new dictionary<string, object>() { { "class", "smallbuttoncart" } })                                                         }                                                     </div>                                                     <div class="f-c"></div>                                                 </div>                                             }                                         }                                         </div>                                     </div>                                 </div>                             </div>                             }                             <div class="titelbox border-top-r-l full-row darkgrey-background">                                 <div class="page-title darkgrey-background">                                     <h3>@t("pac.summary")</h3>                                 </div>                             </div>                             <div class="box border-bottom-r-l info-row">                                 <div class="osc-data">                                     <div class="osc-table">                                         <div class="mm-items" id="summarytable">                                         </div>                                     </div>                                 </div>                             </div>                         </div>                         <div class="f-c"></div>                           <div class="f-r full-row right">                         @html.submitbutton(t("pac.button.toshoppingcart").text, buttonstyle.lightgrey)                         </div>                         <div class="f-c "></div>                 </div>             </div>         </div>     } <script type="text/javascript" language="javascript">      var summaryrow = "<div class=\"mm-row mm-summaryrow\"><div class=\"mm-col summaryquantity-col\" id=\"summaryrow\"></div><div class=\"mm-col summaryname-col\">@t("pac.price")</div><div class=\"mm-col summaryprice-col\">#price#</div><div class=\"f-c\"></div></div>";     var elementrow = "<div class=\"mm-row\" id=\"summaryrow_\"><div class=\"mm-col summaryquantity-col\" id=\"summaryquanity_\">#quantity#</div><div class=\"mm-col summaryname-col\" id=\"summaryname_\">#name#</div><div class=\"mm-col summaryprice-col\" id=\"summaryprice_\">#price#</div><div class=\"f-c\"></div></div>";      function calculatesummary() {         var sum = 0.00;         var position = 0;          $('#summarytable').empty();          $('input[id$="quantity"]').each(             function () {                  //summ price                 var id = this.id.substring(this.id.indexof("[")+1, this.id.indexof("]"));                 var price = $('#pricevalue_' + id)[0].value.replace(",",".");                 var quantity = this.value;                 var val = 0;                 if(!isnan(quantity) && !isnan(price) && quantity > 0)                 {                     val = parsefloat(quantity) * parsefloat(price);                     sum = sum + val;                      //create new row                     var newrow = elementrow;                     newrow = newrow.replace("#quantity#", this.value);                     newrow = newrow.replace("#name#", $('#name_' + id)[0].innerhtml);                     newrow = newrow.replace("#price#", val.tofixed(2).replace(".",",") + " (eur)");                     newrow = newrow.replace("summaryrow_", "summaryrow_" + id);                     newrow = newrow.replace("summaryquanity_", "summaryquanity_" + id);                     newrow = newrow.replace("summaryname_", "summaryname_" + id);                     newrow = newrow.replace("summaryprice_", "summaryprice_" + id);                      //add row summarytable                     $('#summarytable').append(newrow);                 }             }             );          var newsummaryrow = summaryrow;         newsummaryrow = newsummaryrow.replace("#price#", sum.tofixed(2).replace(".",",") + " (eur)");         $('#summarytable').append(newsummaryrow);     }      function addonupdatefunctions()     {         $('input[id$="quantity"]').each(             function () {                 this.setattribute("onchange", "calculatesummary();");                 });         $("a[class^='t-link t-icon t-arrow-']").each(             function () {                 this.setattribute("onclick", "calculatesummary();");                 });     }      $(document).ready(calculatesummary());     $(document).ready(addonupdatefunctions()); </script>  @(html.telerik().stylesheetregistrar()         .defaultgroup(group => group             .add("telerik.common.min.css")             .add("telerik.vista.min.css")             .add("telerik.rtl.min.css")             )) @(html.telerik().scriptregistrar()         .jquery(false)         .jqueryvalidation(false)         ) 

any idea happening? thanx!

you have 2 conditions keep products getting listed in <form>:

if (model.products.count > 0) 

and:

if (model.products[i].isdownload) 

so, if there no products in category or there no downloadable products, products null when posted. expected behavior. check null , need do. in case i'd ignore because there no products add shopping cart , user clicked in error.


Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -