簡體   English   中英

MVC與Razor創建下拉列表

[英]MVC with Razor creating drop down list

我有以下代碼,我能夠創建一個下拉列表但是當我提交時,我得到的Object引用沒有設置為對象異常的實例。 News類有Category和Category類有Id,Name,Order。

我怎樣才能解決這個問題?

我的觀點:

<div class="editor-field">
  @Html.DropDownListFor(m => m.News.Category.Id, Model.Categories, "Select One")
  @Html.ValidationMessageFor(m => m.News.Category)
 </div> 

視圖模型:

public class NewsViewModel
{
    public string SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
    public News News { set; get; }
}

和控制器動作:

[HttpPost]
public ActionResult Create(NewsViewModel newsViewModel)
{
    try
    {
        using (var session = NHibernateHelper.OpenSession())
        {
            using (var tx = session.BeginTransaction())
            {

                session.Save(newsViewModel.News);
                tx.Commit();
            }
        }

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

我在保存模型session.Save(newsViewModel.News);時獲得異常session.Save(newsViewModel.News);

您的下拉列表是否在您的獲取請求中填充了值?

如果是,則在提交時,viewModel的m.News.Category.Id屬性是否設置了您在下拉列表中選擇的值的ID?

如果是,那么它不是下拉列表的問題......它與您正在使用的NHibernate會話有關...嘗試類似(新聞)session.Save(newsViewModel.News);

你在哪里創建模型對象? 您在視圖中使用Model.Categories,但不將模型對象傳遞給視圖。 您應該將模型對象作為View方法的第一個參數傳遞:

    ...
    catch
    {
        return View(/* here, there must be a model object */);
    }

像這樣的東西:

    ...
    catch
    {
        var model = new NewsViewModel();
        return View(model);
        ... or ...
        return View(session.Load<NewsViewModel>(....));
    }

嘗試這個

public int? SelectedId { get; set; }

@Html.DropDownListFor(m => m.SelectedId, Model.Categories, "--Select One--")

[HttpPost]
public ActionResult Create(NewsViewModel newsViewModel)
{
    if(ModelState.isValid())
    {
    try
    {
        using (var session = NHibernateHelper.OpenSession())
        {
            using (var tx = session.BeginTransaction())
            {
                newsViewModel.News.Category.Id = newsViewModel.SelectedId.Value;
                session.Save(newsViewModel.News); 
                tx.Commit();
            }
        }

        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM