Eric Nielsen
Eric Nielsen

Reputation: 553

dropdown list sends null value to post action

this is my Get actionresult :

public ActionResult Add()
        {
            ViewData["categoryList"]= _categoryRepository.GetAllCategory().
            ToSelectList(c => c.Id, c => c.Name);

            return View("Add");
        }

this my razor that render the categoryList , and I have no trouble with that !

<div>
        @Html.LabelFor(b => b.Category)
        @Html.DropDownList("Category", ViewData["categoryList"] as IEnumerable<SelectListItem>)
        @Html.ValidationMessageFor(b => b.Category)
    </div> 

finally after submitting the page , category select send via null value to post this action

     [HttpPost]
        public ActionResult Add(BlogPost blogPost)
        {
            if (ModelState.IsValid)
            {
                blogPost.PublishDate = DateTime.Now;

                _blogPostRepository.AddPost(blogPost);

                _blogPostRepository.Save();
                return RedirectToAction("Add");
            }
            return new HttpNotFoundResult("An Error Accoured while requesting your               order!");
        }

could anybody tell me why ??

Upvotes: 0

Views: 882

Answers (1)

AliRıza Adıyahşi
AliRıza Adıyahşi

Reputation: 15866

controller

public ActionResult Add()
{
    ViewBag.CategoryList = new SelectList(_categoryRepository.GetAllCategory(), "Id", "Name");

    // you dont need the specify View name 
    // like this: return View("Add")
    // you need to pass your model.
    return View(new BlogPost());
}

view

@Html.DropDownListFor(model => model.CategoryId, ViewBag.CategoryList as SelectList, "--- Select Category ---", new { @class = "some_class" })

controller post action

[HttpPost]
public ActionResult Add(BlogPost blogPost)
{
    if (ModelState.IsValid)
    {
        blogPost.PublishDate = DateTime.Now;

        _blogPostRepository.AddPost(blogPost);

        _blogPostRepository.Save();

        // if you want to return "Add" page you should
        // initialize your viewbag and create model instance again
        ViewBag.CategoryList = new SelectList(_categoryRepository.GetAllCategory(), "Id", "Name");
        return View(new BlogPost());
    }
    return new HttpNotFoundResult("An Error Accoured while requesting your               order!");
}

Upvotes: 1

Related Questions