我有一个工作创建页面,它使用JavasScript来处理各种数据字符串并在前端显示它们。
当我尝试在同一视图的编辑页面中实现类似的代码时,我遇到了一个" NullReferenceException" - 对象引用未设置为对象的实例。
下面是" ProductController"中的Edit方法,错误在IF语句中抛出:
public ActionResult Edit(int id = 0)
{
using (ManagePromotion promLogic = new ManagePromotion(ref uow))
using (ManageDistributionRule druleLogic = new ManageDistributionRule(ref uow))
{
Product prd = ProductLogic.GetByAndInclude(x => x.ProductID == id, new List<string>() { "AddSamplePacks" }).FirstOrDefault();
ProductVM vm = new ProductVM(prd, (int)System.Web.HttpContext.Current.Session["CustomerID"]);
if (vm.Product.AddSamplePacks == null || promLogic.GetById(vm.Product.PromotionID).CustomerID != (int)System.Web.HttpContext.Current.Session["CustomerID"])
{
throw new HttpException(404, "");
}
return View(vm);
}
}
以下是我在编辑页面前端添加的javascript,如果我删除此代码页面运行正常且没有错误:
var input = "comm";
//
//alert("HIT");
$.getJSON('getCat', { term: input }, function (result) {
var ddl = $('#selectTypeCat');
alert(result);
//
var length = result.length;
ddl.empty();
$(document.createElement('option'))
.attr('value', 0)
.text("-- Please Select --")
.appendTo(ddl);
$(document.createElement('option'))
.attr('value', 100)
.text("All Distribution Rules")
.appendTo(ddl);
$(result).each(function (jack) {
//
$(document.createElement('option'))
.attr('value', result[jack])
.text(result[jack])
.appendTo(ddl);
});
});
&#34; getCat&#34; Product Controller中的方法与创建过程完美配合,如下所示:
public ActionResult getCat(string term)
{
int customerId = (int)System.Web.HttpContext.Current.Session["CustomerID"];
//
//string term = "small";
//
var getCat = (from ctype in TypeLogic.GetCustomerProdIndex(customerId, term).List
select new { ctype.TypeName, ctype.TypeCategoryID }).ToList();
List<String> returnList = new List<string>();
foreach (var item in getCat)
{
returnList.Add(item.TypeName.ToString());
}
returnList = returnList.Distinct().ToList();
return Json(returnList, JsonRequestBehavior.AllowGet);
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:0)
你检查m.Product.AddSamplePacks == null
但是你不检查vm.Product是否为空。只需添加vm.Product == null
public ActionResult Edit(int id = 0)
{
using (ManagePromotion promLogic = new ManagePromotion(ref uow))
using (ManageDistributionRule druleLogic = new ManageDistributionRule(ref uow))
{
Product prd = ProductLogic.GetByAndInclude(x => x.ProductID == id, new List<string>() { "AddSamplePacks" }).FirstOrDefault();
ProductVM vm = new ProductVM(prd, (int)System.Web.HttpContext.Current.Session["CustomerID"]);
if (vm.Product == null || vm.Product.AddSamplePacks == null || promLogic.GetById(vm.Product.PromotionID).CustomerID != (int)System.Web.HttpContext.Current.Session["CustomerID"])
{
throw new HttpException(404, "");
}
return View(vm);
}
}
答案 1 :(得分:0)
我终于意识到问题所在。
在我的JavaScript中,我有一个看起来像这样的JSON调用:
$.getJSON('getDistributionNameBox', { term: input }, function (result)
然而,因为它是&#34;编辑&#34;页面在调用此请求时会自动运行HTTP编辑方法。
FIX:
我改为在Javascript中调用了我的JSON方法,以便明确调用有问题的方法:
$.getJSON('/CustomerArea/Product/getDistributionNameBox', { id: drID }, function (result)
这意味着不再重新调用edit方法,并且可以在页面内多次运行动态JSON请求。