2010-05-02 53 views
0

這個問題與另一個問題有關,我最近問,它可以找到here的一些背景信息。當使用DropDownListFor()編輯視圖時ASP.Net MVC對象參考

這裏是編輯的ActionResult代碼:

public virtual ActionResult Edit(int id) 
    { 
     ///Set data for DropDownLists. 
     ViewData["MethodList"] = tr.ListMethods(); 
     ViewData["GenderList"] = tr.ListGenders(); 
     ViewData["FocusAreaList"] = tr.ListFocusAreas(); 
     ViewData["SiteList"] = tr.ListSites(); 
     ViewData["TypeList"] = tr.ListTalkbackTypes(); 
     ViewData["CategoryList"] = tr.ListCategories(); 

     return View(tr.GetTalkback(id)); 
    } 

我添加列表到ViewData的在dropdownlists使用,這些都是IEnumerable和全部返回值。

GetTalkback()返回一個從對講表生成的Talkback類型的實體框架對象。

的DropDownListFor代碼:

<%: Html.DropDownListFor(model=>model.method_id,new SelectList(ViewData["MethodList"] as IEnumerable<SelectListItem>,"Value","Text",Model.method_id)) %> 

我正在查看記錄在所有字段的值。當我點擊提交視圖時,我得到的對象引用未設置爲對象的實例。上述行錯誤。

在此之前的表單中有許多標準字段,所以錯誤只發生在下拉列表中,並且它正在發生在所有這些字段上。

任何想法?這是我第一次進入MVC,C#和Entity,所以我完全失去了!

+0

這是什麼意思「當我點擊提交視圖」? – LukLed 2010-05-02 21:46:40

+0

對不起,如果我不是很清楚。 當我調試並導航到編輯視圖時,它會顯示正確的記錄。如果我然後單擊編輯頁面上的保存,即出現錯誤時。 – hermiod 2010-05-02 22:51:37

回答

1

如果你有[HttpPost]方式類似

[HttpPost] 
public ActionResult Edit(Talkback model) 
{ 
    //Do something with model 
    return View(model); 
} 

你必須重新填寫的ViewData。如果你不這樣做,你會有Object reference not set to an instance of an object錯誤。

做將遵循POST-REDIRECT-GET圖案和那樣做的最好的事情:

[HttpPost] 
public ActionResult Edit(Talkback model) 
{ 
    //Do something with model 
    return RedirectToAction("Edit", new { id = model.id }); 
} 

你已經ViewData的再次[HttpGet]方法填補。

+0

現在我得到'具有空EntityKey值的對象不能附加到對象上下文。'它看起來像一個空TalkBack回傳給控制器,而不是我發送到HTTPGet上的編輯視圖。默認的HTTPPost簽名是'int id,FormCollection集合',我將其更改爲Talkback模型,在視圖中需要做些額外的工作才能使它掛鉤? – hermiod 2010-05-03 00:38:33

+0

@hermiod:你只回復你在表單中的內容。你不會得到整個模型。是否在回發中設置了'model.Id'?如何調用id的屬性? – LukLed 2010-05-03 00:48:01

+0

我正在通過HTTPGet ActionResult中的Talkback對象進行編輯。所有字段都顯示在表單上,​​包括ID字段,在Talkback對象中稱爲talkback_id。禁止我將某些字段更改爲下拉列表,表單上的所有代碼都是默認生成的。該頁面的BeginForm是默認值:Html.BeginForm()。我見過這種情況的例子正在改變,那我需要在這裏做什麼?對於我對這個問題幾乎完全無知的道歉,我仍然在學習。 – hermiod 2010-05-03 01:05:38