2013-05-29 27 views
0

由於某些原因,我的下拉列表中的SelectedId始終爲空,當我回發表單。模型中的項目不是空的,只是SelectedID。除了下拉選擇,我的模型的所有其他值都很好。以下是與我的下拉菜單相關的所有代碼。有任何想法嗎?謝謝!asp mvc下拉SelectedId爲空

P.S - 我在下拉菜單中使用了一個模板,當我在我的cshtml視圖中使用@ Html.EditorForModel()時,從我的模型中自動創建下拉菜單。

模板:

@model AFUEMVC.Models.DropDownModels.DropDownViewModel 
@Html.DropDownListFor(x => x.SelectedId, new SelectList(Model.Items, "Value", "Text",  Model.SelectedId)) 

型號:

//Dropdowns 
[Display(Name = "Fire Type"),] 
public DropDownViewModel FireTypeItems { get; set; } 

視圖模型:

public class DropDownViewModel 
{ 
    public string SelectedId { get; set; } 
    public IEnumerable<SelectListItem> Items { get; set; } 
} 

編輯: 我按照以下方式填寫我的下拉菜單。

public void GenerateDropDowns(BasicIdentificationModel model) 
    { 
     ///////////////////////DROP DOWNS 
     model.FireTypeItems = GetFireTypeItems(); 
     ///////////////////////////////////// 

    } 

public DropDownViewModel GetFireTypeItems() 
    { 
     DropDownViewModel newdd = new DropDownViewModel(); 

     newdd.Items = new[] 
      { 
       new SelectListItem { Value = "1", Text = "IA" }, 
       new SelectListItem { Value = "2", Text = "Extended Attack" }, 
       new SelectListItem { Value = "3", Text = "Large Fire Support" },     
      }; 

     return newdd; 

    } 

    [HttpPost] 
    public ActionResult BasicIdentificationIndex(BasicIdentificationModel returndata) 
    { 
     GenerateDropDowns(returndata);    
     SaveDB(returndata);  
     return RedirectToAction("DispatchResponseIndex", "DispatchResponse"); 
    } 

回答

0

試試這個(不使用模板):

型號:

public class myDbContext : DbContext 
{ 
    ... 
    public DbSet<SelectListItem> SelectListItems{ get; set; } 
    ... 
    [Display(Name = "Fire Type"),] 
    public string SelectedID { get; set; } 
    ... 
} 

在你看來:

@Html.DropDownListFor(model => model.SelectedID, new SelectList(new Models.myDbContext().SelectListItems, "Value", "Text"))     
+0

我得到一個異常與@ Html.DropDownListFor(型號=> model.SelectedID,新的SelectList(新AFUEMVC.Models.BasicIdentificationModel()。SelectListItems, 「價值」, 「文本」)) 一個或多個驗證錯誤在模型生成過程中檢測到: \ tSystem.Data.Entity.Edm.EdmEntityType :: EntityType'SelectListItem'沒有定義鍵。定義此EntityType的關鍵字。 \ tSystem.Data.Entity.Edm.EdmEntitySet:EntityType:EntitySet'SelectListItems'基於沒有定義鍵的類型'SelectListItem'。 –

+0

這是因爲你的實體類沒有定義主鍵。打開你的模型.edmx文件。右鍵單擊SelectedId屬性並選擇屬性。將實體密鑰屬性設置爲true。 – AminSaghi

+0

我有點困惑,爲什麼我正在做這一切。我的要求之一是有下拉項目客戶端(因爲他們最終希望能夠離線使用HTML 5緩存的Web應用程序)。所以即使它像這樣工作,它似乎並沒有真正完成任何事情,儘管我真的很感謝幫助。 –

1

解決。

@ Html.DropDownListFor(型號=> model.State,新的SelectList(Enum.GetValues(typeof運算(MyNamespace.Enums.States))))

我發現了一個帖子在這裏:

MVC3 Razor DropDownListFor Enums

到目前爲止最簡單的方法來做到這一點。