2015-01-14 34 views
-1

我想將我的模型綁定到.NET中的多選.net MVC。這是我的模型在.net中設置模型中的列表框中的選定值mvc

public class RuoloProgetto 
{ 
    [Key] 
    public int id_ruolo_prog { get; set; } 
    [Display(Name = "Ruolo")] 
    public int id_ruolo { get; set; } 
    [ForeignKey("id_ruolo")] 
    public virtual Ruolo ruolo { get; set; } 
    public int id_progetto { get; set; } 
    //[ForeignKey("id_progetto")] 
    //public virtual Progetto progetto { get; set; } 
    [Display(Name = "Utente")] 
    public string id_utente { get; set; } 
    [ForeignKey("id_utente")] 
    public virtual IdentityUser utente { get; set; } 
    [DisplayName("Carico di lavoro in %")] 
    [Required] 
    public int percentuale { get; set; } 
    public int versione { get; set; } 
    [DisplayName("Moduli Responsabile")] 
    public int[] Choices { get; set; } 
    public virtual List<ModelRP> moduli { get; set; } 
} 

這是在設定值選擇列表的我的控制器功能:

List<SelectListItem> specifiche = new List<SelectListItem>(); 
     var specifiche2 = db.Specificha.Where(p => p.id_progetto == Progetti.id_progetto).Select(x => new { x.id_specifiche, x.desc_specifiche }).ToList(); 

     foreach (var item in specifiche2) 
     { 
      specifiche.Add(new SelectListItem { Value = item.id_specifiche.ToString(), Text = item.desc_specifiche }); 
     } 
     ViewData["Specs"] = specifiche; 

,這是我的觀點:

@Html.ListBoxFor(m => item.Choices, 
    new MultiSelectList((IEnumerable<SelectListItem>)ViewData["Specs"], "Value", "Text", 
    item.moduli.Select(fl => new SelectListItem 
    { 
     Text = fl.moduloutente.desc_specifiche.ToString(), 
     Value = fl.moduloutente.id_specifiche.ToString(), 
     Selected = item.moduli.Any(y => y.id_specifiche == fl.id_specifiche) 
    })), 
    new 
    { 
     Selected = true, 
     @Class = "js-example-basic-multiple form-control", 
     Multiple = "multiple", 
     @Name = "progetto.ruoloprogetto[" + index + "].Choices", 
     @Id = "progetto.ruoloprogetto[" + index + "]_Choices", 
     @Placeholder = "Moduli", 
    }) 

的ViewData的來確定!問題在於選定的值!當我檢查即時窗口item.moduli正確填充數據,但沒有任何內容顯示爲在界面中選擇!

有人可以看到我在做什麼錯嗎?

回答

1

列表框中您的結合屬性Choices所以你需要你通過該視圖,然後就

@Html.ListBoxFor(m => item.Choices, (IEnumerable<SelectListItem>)ViewData["Specs"], new { @class = "js-example-basic-multiple form-control" }) 

如果選項值的值之前設置的Choices值控制器(說) 1至10,Choices[2, 4],則會選擇第二個和第四個選項。

注意也不需要設置Multiple = "multiple"(這已經由助手完成了),並且您不應該試圖重寫name屬性(其他智能綁定將在回發時失敗)。另外SelectedPlaceholder不是<select>的有效屬性

+0

我沒有問題的帖子,因爲我確實得到了被選中的值。我的問題只是填充選定的值。這些不在選項中,而是在列表item.moduli中(它是db中的表模型) – user2622220

+0

您誤解了bind的工作方式 - 您對'Choices'的綁定,如果其值爲null或不包含任何值匹配選項的值,則不會選擇任何內容。然後看看你爲此生成的html如果name屬性真的是''progetto.ruoloprogetto [0] .Choices「'然後你綁定,那麼你有一些其他的綁定問題 - 你是否在做一些集合並試圖覆蓋默認行爲? –

+0

你說得對,我正在搞這個!需要重新開始。你能否建議我爲了在.net中創建一個多選列表框而需要的模型結構?我會很感激! .net,我很新,剛開始幾個月前從零開始學習。另外,順便說一句,我使用的是命名,因爲我正在創建對象,我需要通過索引來區分它們。 – user2622220

相關問題