0

在我的解決方案我使用列表框中DISPLY列表像波紋管&也是我使用Chosen.js,這樣我可以選擇多條記錄。驗證列表視圖中使用註釋

@Html.ListBox("AllLanguages", new SelectList(ViewBag.Languages, "Id", "Language1")) 


<div id="languagesDiv"></div> 

使用jQuery我creting我的模型綁定屬性的隱藏字段,如波紋管

$(document).ready(function() { 
     $("#AllLanguages").chosen(); 

     $("#AllLanguages").on("change", function() { 
      $("#languagesDiv").empty(); 
      var languagesCount = 0; 
      $("#AllLanguages option:selected").each(function() { 
       var lang = "<input type='hidden' id='MovieLanguages[" + languagesCount + "].LanguageId' name='MovieLanguages[" + languagesCount + "].LanguageId' value='" + $(this).val() + "' />"; 

       $("#languagesDiv").append(lang); 
       languagesCount++; 
      }); 
     }); 
    }); 

這是什麼jQuery將做的是,它會爲每個選定的值隱藏字段,如波紋管

<input type='hidden' id='MovieLanguages[0].LanguageId' name='MovieLanguages[0].LanguageId' value='1' /> 
    <input type='hidden' id='MovieLanguages[1].LanguageId' name='MovieLanguages[1].LanguageId' value='2' /> 

現在我想確保用戶應該從列表框中選擇至少一個值。

我這個型號屬性列表

 public IList<Language> MovieLanguages { get; set; } 

我使用@Html.ValidationMessageFor(x => x.MovieLanguages)試過,但這個不起作用。

如何驗證呢? 如果還有更好的方法可以做到這一點,那麼請讓我知道

+0

沒有適合您需求的驗證屬性。您始終可以對選定的選項進行計數,如果爲零,請阻止提交併顯示錯誤消息。但是,爲什麼你要創建隱藏的輸入? - 當您提交表單時,您的'AllLanguages'屬性包含所選選項的值 –

+0

@StephenMuecke如何將所選值直接綁定到我的Model屬性?與模型屬性 –

+0

您查看模型更新的問題需要一個屬性'IEnumerable的 SelectedLanguages'然後將其'@ Html.ListBoxFor(M => m.SelectedLanguages,新的SelectList(ViewBag.Languages, 「ID」, 「LANGUAGE1」))'當你提交,SelectedLanguages'的'價值將包含所有選擇的ID的(雖然我建議你的視圖模型包含的屬性'的SelectList Languages'而不是使用'ViewBag') –

回答

0

HTML選擇元素只能返回簡單類型:int,string等。您不能從選擇輸入發佈完整的Language對象。因此,你需要一個可以綁定到一個屬性將接受語言ID的列表:

public List<int> SelectedLanguageIds { get; set; } 

然後,在你的看法:

@Html.ListBoxFor(m => m.SelectedLanguageIds, new SelectList(ViewBag.Languages, "Id", "Language1")) 

在您的文章的行動,那麼,你可以使用這個列表來查找相關Language對象:

var selectedLanguages = db.Languages.Where(m => model.SelectedLanguageIds.Contains(m.Id)); 

爲了要求至少一個選擇,只需使用Required屬性像任何其他財產。

+0

我也是這樣做的。但一些如何驗證「SelectedLanguageIds」不適用。我在這個屬性的viewmodel中添加了「[Required]」屬性。這是由於我使用的是choose.js。 –