【问题标题】:System.NullReferenceException on dropdownlist下拉列表上的 System.NullReferenceException
【发布时间】:2013-04-17 00:18:18
【问题描述】:

我正在创建一个网上商店,当我添加产品时一切正常,当我尝试编辑我的产品时,我在它们所属的类别上遇到错误。

这是我的代码:

@model WorkshopASPNETMVC_III_Start.ViewModels.ProductViewModel

//somecode

{
//view other text boxes
    <div class="editor-field">
        @Html.DropDownListFor(model => model.SelectedSubcatID, Model.Subcats)
        @Html.ValidationMessageFor(model => model.SelectedSubcatID)       
    </div>

现在,当我实际更改它们时会发生此错误,而不是当我获得视图来更改它们时。它说我的 selectedSubcatID 或 Model.Subcats 为空。

但没有一个是:

ProductViewModel viewModel = new ProductViewModel();
Product product = productDBController.getProduct(productId);
viewModel.Product = product;
viewModel.SelectedSubcatID = product.Subcat.subcat_id;
viewModel.Subcats = getSelectListSubcats();
return View(viewModel);


private SelectList getSelectListSubcats()
{
    List<SubCategorie> subcats = subcatDBController.GetSubCats();
    SubCategorie emptySubcat = new SubCategorie();
    emptySubcat.subcat_id = -1;
    emptySubcat.naam = "";
    subcats.Insert(0, emptySubcat);

    return new SelectList(subcats, "subcat_id", "Naam");
}

编辑

[HttpPost]
public ActionResult WijzigProduct(ProductViewModel viewModel, HttpPostedFileBase file)
{
    if (file == null)
    {
        MessageBox.Show("Product niet gewijzigd, geen plaatje geselecteerd!");
        return RedirectToAction("NieuwProduct", "Beheer");
    }
    else
    {
        String path = "/Content/Images";
        DirectoryInfo info = new DirectoryInfo(Server.MapPath(path));
        if (!info.Exists)
        {
            info.Create();
        }

        String fullName = String.Format("/Content/Images/{0}", file.FileName);
        file.SaveAs(Server.MapPath(fullName));

        try
        {
            if (ModelState.IsValid)
            {
                viewModel.Product.Subcat = subcatDBController.getSubCat(viewModel.SelectedSubcatID);
                productDBController.UpdateProduct(viewModel.Product, fullName);
                return RedirectToAction("beheerPagina", "Beheer");
            }
            else
            {
                viewModel.Subcats = getSelectListSubcats();
                return View(viewModel);
            }

        }
        catch (Exception e)
        {
            ViewBag.FoutMelding = "Er is iets fout gegaan: " + e;
            return View();
        }
    }
}

【问题讨论】:

  • 您说更改选择时会发生这种情况。您是否提交表单以查看错误?
  • 是的,当我输入新信息并单击“编辑”我的 nullreferencexcetion 时,未发送到异常实例的对象发生在此:@Html.DropDownListFor(model => model.SelectedSubcatID, Model.Subcats )
  • 您能显示控制器的 POST 操作以进行保存吗?我的猜测是,您可能需要在该操作中调用 getSelectListSubcats
  • 确定我会编辑原始帖子。
  • 嗯,你能不能通过回帖调试一下,让我们知道它在哪个代码路径上返回(isvalid 路径,!isvalid 路径,catch 路径,file==null 路径?

标签: c# asp.net nullreferenceexception


【解决方案1】:

我发现了问题,不知道发生了什么,但是当你有一天遇到这个问题时可能值得一试。

在我放入所有新属性的文件中,例如价格、名称等。我在模型中进行了验证。对价格的一项验证不正确。我把它注释掉了,它起作用了:

检查验证:

@model WorkshopASPNETMVC_III_Start.ViewModels.ProductViewModel
//somecode
{
//view other text boxes
<div class="editor-field">
    @Html.DropDownListFor(model => model.SelectedSubcatID, Model.Subcats)
    @Html.ValidationMessageFor(model => model.SelectedSubcatID)       
</div>

我不确定为什么会收到这个 nullreferenceexception,但我真的很高兴它得到了修复!谢谢大家的支持。

【讨论】:

    猜你喜欢
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多