MVC3 Razor (Drop Down List)

2020-05-04 06:18发布

问题:

I'm new towards MVC3 Razor. Currently, I'm facing this error "Object reference not set to an instance of an object.", which I have no idea what is this about.

In Model

    public List<SelectListItem> CatList { get; set; }

    [Display(Name = "Category")]
    public string CatID { get; set; }

In Controller

    public ActionResult DisplayCategory()
    {
        var model = new CatModel();
        model.CatList = GetCat();
        return View(model);
    }


    private List<SelectListItem> GetCat()
    {
        List<SelectListItem> itemList = new List<SelectListItem>();
        itemList.Add(new SelectListItem { Text = "1", Value = "1" });
        itemList.Add(new SelectListItem { Text = "2", Value = "2" });
        return itemList;
    }

In CSHTML

@using (Html.BeginForm())
{
    <table>
    <tr>
    <td>@Html.LabelFor(c => c.CatID)</td>
    <td>@Html.DropDownListFor(c => c.CatID, Model.CatList)</td>
    </tr>

    </table>
}

Thanks for any help.

回答1:

I suspect that you have a POST action in which you forgot to reassign the CatList property of your view model so you are getting the NRE when you submit the form, not when the form is initially rendered:

public ActionResult DisplayCategory()
{
    var model = new CatModel();
    model.CatList = GetCat();
    return View(model);
}

[HttpPost]
public ActionResult Index(CatModel model)
{
    // some processing ...

    // since we return the same view we need to populate the CatList property
    // the same way we did in the GET action
    model.CatList = GetCat();
    return View(model);
}


private List<SelectListItem> GetCat()
{
    List<SelectListItem> itemList = new List<SelectListItem>();
    itemList.Add(new SelectListItem { Text = "1", Value = "1" });
    itemList.Add(new SelectListItem { Text = "2", Value = "2" });
    return itemList;
}