2015-01-21 40 views
0

這是我的控制器動作有型的無ViewData的項目 '的IEnumerable <SelectListItem>' 具有關鍵 'M_TYPE'

 [HttpGet] 
    public ActionResult AddDrug() 
    { 
     UserDB db = new UserDB(); 
     ViewData["MedType"] = new SelectList(db.mtype, "MID", "M_TYPE"); 
     return View(); 
    } 

這是POST方法

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult AddDrug(Drug drug) 
    { 
     UserDB db = new UserDB(); 
     if (ModelState.IsValid) 
     { 
      db.drugs.Add(drug); 
      db.SaveChanges(); 
      ModelState.Clear(); 
      TempData["AlertMessage"] = "Medicine Type Added Sucessfully"; 
      return View(); 
     } 
     return View(drug); 
    } 

這是我的查看

<div class="editor-label"> 
     @Html.LabelFor(model => model.M_TYPE) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.M_TYPE,ViewData["MedType"] as IEnumerable<SelectListItem>,"(none)") 
     @Html.ValidationMessageFor(model => model.M_TYPE) 
    </div> 

現在我不想從下拉列表中插入數據到數據庫中,但它通過該錯誤

+0

您需要在返回之前重新分配'SelectList'查看在POST方法(它的'null'導致那個異常) – 2015-01-21 10:08:21

+0

可能的重複[沒有ViewData項的類型'IEnumerable '有關鍵「鍵」](http://stackoverflow.com/questions/27916642/there-is-no-viewdata-item-of-type-enumerableselectlistitem-that-has-the-key) – 2015-01-21 10:12:59

回答

1

當您返回視圖,您需要重新分配SelectList否則null這導致例外(見也注意到有關重定向)

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult AddDrug(Drug drug) 
{ 
    UserDB db = new UserDB(); 
    if (ModelState.IsValid) 
    { 
     db.drugs.Add(drug); 
     db.SaveChanges(); 
     // ModelState.Clear(); // don't do this! 
     TempData["AlertMessage"] = "Medicine Type Added Sucessfully"; 
     // return View(); // don't do this! 
     return RedirectToAction("AddDrug"); // do this instead 
    } 
    ViewData["MedType"] = new SelectList(db.mtype, "MID", "M_TYPE"); // add this 
    return View(drug); 
} 
+0

感謝感謝感謝 – 2015-01-21 10:48:07

+0

然後接受以及所有其他答案你的問題,你已經評論說,它的作品! – 2015-01-21 10:50:43

相關問題