2017-11-20 7 views
0

dropdownというレンダリングを簡単に作成しようとしていますが、これはRazorPagesで生成されたCreateフォームでの使用です。なんらかの理由で、SelectListmultiple="multiple"と表示され、すべてのオプションがdropdownの代わりにスクロールバーを含むフレームに表示されます。私の問題は私のコントローラと、これらの属性を設定しないときに希望の結果が得られたので、SelectListItemsの "Text"と "Value"の両方の属性を匿名型に設定しようとしているという事実にあります。SelectListレンダリングで複数の "multiple"を使用したくない場合

これは多くのことが私にとって非常に新しいものです。誰かが自分のコードに関して一般的なアドバイスをお持ちでしたら、感謝しています。ここで

は、私の見解モデルである:ここで

public class CreateFileViewModel 
    { 
     public SelectList EnrolleeId { get; set; } 
     public SelectList GroupId { get; set; } 

     [DataType(DataType.Date)] 
     public DateTime StartDate { get; set; } 

     public string Status { get; set; } 
    } 

は私のコントローラです:

public IActionResult TestCreate() 
     { 
      //query items for SelectLists 
      var users = from u in _context.Users 
         orderby u.LastName 
         select u; 

      var groups = from g in _context.Group 
         orderby g.Name 
         select g; 

      // Loop through queries above and convert to collections of SelectListItems 
      var enrolleeSelectListItems = from u in users 
             select new SelectListItem() 
             { 
              Value = u.Id.ToString(), 
              Text = u.LastName + ", " + u.FirstName + " " + u.MiddleName 
             }; 

      var groupSelectListItems = from g in groups 
             select new SelectListItem() 
             { 
              Value = g.ID.ToString(), 
              Text = g.Name 
             }; 

      //convert SelectListItem collections into SelectLists within view 
      var cfvm = new Models.TestModels.CreateFileViewModel(); 
      cfvm.EnrolleeId = new SelectList(enrolleeSelectListItems, "Value", "Text"); 
      cfvm.GroupId = new SelectList(groupSelectListItems, "Value", "Text"); 

      return View(cfvm); 
     } 

は、これが私の見解の関連部分である:

<div class="form-group"> 
       <label asp-for="EnrolleeId" class="control-label"></label> 
       <select asp-for="EnrolleeId" asp-items="Model.EnrolleeId"> 
        <option value="">Select</option> 
       </select> 
      </div> 

、ここどのようですブラウザでレンダリング:

<select id="EnrolleeId" multiple="multiple" name="EnrolleeId" aria-invalid="false" class="valid"> 
        <option value="">Select</option> 
        <option value="3e60fabd-6901-45a1-ae2a-5056d77f415c"></option> 
        <option value="40ce8b6e-62a5-4c3c-808b-90e36d633ec0"></option> 
        <option value="c0c49df2-da52-4a01-9a8a-47bab6f5496d"></option> 
</select> 

答えて

0

asp-forEnrolleeId)に使用したプロパティはコレクションタイプであるためです。 SelectListIEnumerable

理想的には2つのプロパティ、オプションのリストを構築するために必要なアイテムのコレクション用と選択されたオプションの値

public class CreateFileViewModel 
{ 
    public int SelectedEnrolleId {set;get;} // This new one 
    public SelectList EnrolleeId { get; set; } 

    public SelectList GroupId { get; set; } 
    [DataType(DataType.Date)] 
    public DateTime StartDate { get; set; } 
    public string Status { get; set; } 
} 

とビューで

<select asp-for="SelectedEnrolleId" asp-items="Model.EnrolleeId"> 
    <option value="">Select</option> 
</select> 
のための1つを持っている必要がありますを実装します

これは、nameとid属性の値がSelectedEnrolleIdに設定されたselect要素をレンダリングします。だからフォームを提出すると、そこからそれを読んでください。

+0

それを修正しました。早速のご返事ありがとうございます! – StateofDK

+0

'EnListから' EnroleeList'(EnrolleIId)のように名前を変更することをお勧めします。 – Shyju

+0

明示的にSelectListプロパティの名前を変更していますか、命名規則や違反していることはありますか? – StateofDK

関連する問題