2012-03-27 120 views
0

我有下面的代碼,我可以創建一個下拉列表,但是當我提交時,我得到的對象引用未設置爲對象異常的實例。 News類有Category和類別類別有Id,Name,Order。MVC與剃刀創建下拉列表

我該如何解決這個問題?

我的觀點:

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

我m到處異常而保存模型session.Save(newsViewModel.News);

+0

你的代碼在哪裏得到這個錯誤? – NiK 2012-03-27 22:00:26

+0

而我保存模型。 session.Save(newsViewModel.News); – DarthVader 2012-03-27 22:02:41

+0

但您沒有在會話中將此對象傳遞給View方法。或者您沒有在視圖代碼中使用會話模型對象。 – oruchreis 2012-03-27 22:07:41

回答

2

是您的下拉正在與價值觀上的填充你的請求?

如果是,在提交時,viewModel的m.News.Category.Id屬性是否設置爲您在下拉列表中選擇的值的ID? (新聞)session.Save(newsViewModel.News);如果是,那麼它不是與下拉的問題...這是與你正在使用的NHibernate會話...嘗試像(新聞)session.Save(newsViewModel.News);

0

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

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

類似的東西:

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

試試這個

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

雖然我沒有問題獲取類別對象。它確實通過了。 – DarthVader 2012-03-27 22:10:34

+0

@DarthVader - 不知道你是如何在下拉列表中遇到問題的,也許你可以在編輯時發佈你正在獲得的異常信息,並提供有關錯誤的更多細節。 – 2012-03-27 22:47:10