ASP.NET MVC DropdownlistFor Object引用未设置为对象的实例?

Ali*_*hşi 1 asp.net-mvc drop-down-menu

这是我的组合模型:

public class AddArticleModel
{
    public TBL_ARTICLES Article { get; set; }
    public IEnumerable<TBL_CATEGORIES> Categories { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和使用模型的控制器.

public ActionResult AddArticle()
{
    AddArticleModel AddArticleModel = new AddArticleModel();
    AddArticleModel.Categories = entity.TBL_CATEGORIES.Select(a => a);

    return View(AddArticleModel);
}
Run Code Online (Sandbox Code Playgroud)

并查看:

@model DunyaYazilim.Models.AddArticleModel
@{
    ViewBag.Title = "AddArticle";
}
@using (Html.BeginForm((string)ViewBag.FormAction, "Home"))
{
    <fieldset>
        <legend>Add Article Form</legend>
        <ol>
            <li>
                @Html.DropDownListFor(m => m.Categories, Model.Categories.Select(c => new SelectListItem { Text = c.Name, Value = c.CategoryID.ToString() }), "-----Select Category----")
            </li>
        </ol>
        <input type="submit" value="Send" />
    </fieldset>
}
Run Code Online (Sandbox Code Playgroud)

并在控制器中发布方法:

[HttpPost]
public ActionResult AddArticle(AddArticleModel AddArticleModel)
{
   //Insert operations:
   return View(AddArticleModel);
}
Run Code Online (Sandbox Code Playgroud)

我的问题:当我发布表单时,发生错误:对象引用未设置为对象的实例.排队:13

Line 12:             <li>
Line 13:                 @Html.DropDownListFor(m => m.Categories, Model.Categories.Select(c => new SelectListItem { Text = c.Name, Value = c.CategoryID.ToString() }), "-----Select Category----")
Line 14:             </li>
Line 15:             <li>
Run Code Online (Sandbox Code Playgroud)

这是什么原因?

注意:本网站有很多考试.我尝试了很多,但我找不到错误的原因.

谢谢.

Dis*_*ile 5

我不确定你是否发布了你的POST操作的完整代码,但如果你这样做,那就错了.

将数据发布到服务器时,您不会发布SelectList的值.您只发布所选值.如果您只是将视图显示回用户,则SelectList将为null.你需要在帖子中重新填充它:

[HttpPost]
public ActionResult AddArticle(AddArticleModel AddArticleModel)
{
    AddArticleModel.Categories = entity.TBL_CATEGORIES.Select(a => a);

    return View(AddArticleModel);
}
Run Code Online (Sandbox Code Playgroud)

如果您只想返回所选类别(看起来很奇怪),这样就可以了:

[HttpPost]
public ActionResult AddArticle(AddArticleModel AddArticleModel)
{
    AddArticleModel.Categories = entity.TBL_CATEGORIES.Where(a => a.CategoryId == AddArticleModel.CategoryId);

    return View(AddArticleModel);
}
Run Code Online (Sandbox Code Playgroud)

这假定您的视图模型上的属性是CategoryId,并且TBL_CATEGORIES实体上的属性也是CategoryId.