0

これは私の Get actionresult です:

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

            return View("Add");
        }

これは私のカミソリで、categoryList をレンダリングします。問題はありません。

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

最後にページを送信した後、このアクションを投稿するためにカテゴリを選択してnull値で送信します

     [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!");
        }

誰か私に理由を教えてもらえますか??

4

1 に答える 1

1

コントローラ

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());
}

見る

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

コントローラーポストアクション

[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!");
}
于 2013-02-19T14:30:00.747 に答える