2011-02-05 8 views
0

は、私は今、私は上記の持っているもの含まリマインダークラスのリストを作りたい、このHTML形式のId質問

public class Reminders() 
{ 
    public List<SelectListItem> Reminder { get; set; } 
    public string SelectedReminder { get; set; } 
} 

のようなものを持っています。

List<Reminders> reminders = new List<Reminders>(); 
// add SelectListItems somehow through auto mapper(not sure how to do) 
// add reminders into my viewModel 

私の見解では、ドロップダウンリストを生成するためにそれらをループする必要があります。つまり、ユーザーが5リマインダーを設定できるようにしたい場合、コレクションに5リマインダがあることを確認するだけです。

私は彼らに1を持たせたいなら、コレクションにリマインダが1つあることを確認します。私が100を望むなら、100に変更します。これを行うことで、私は将来、その面積が非常に簡単に拡大または縮小できることを証明しました。

私はこれを試してみて、automapperでそれを行う方法を理解しようとする前に、どうすれば各ドロップダウンリストに独自のIDを持たせることができますか?今すぐ同じID(「SelectedReminder」)を持つことがわかります。

もちろん、htmlページあたり1つのIDしか持たないので、これは悪いことです。だから私は彼らに異なるIDを持たせることができますか?

答えて

2

エディタテンプレートを使用している場合は、すべての命名規則がフレームワークによって正しく処理されるため、心配する必要はありません。また、ルーピングを実行する必要はありません。ですから、IEnumerable<Reminders>を返すコントローラのアクションを持っていて、ドロップダウンリストを生成することとします

public ActionResult Index() 
{ 
    var reminders = new[] 
    { 
     new Reminders 
     { 
      Reminder = new List<SelectListItem> 
      { 
       new SelectListItem { Value = "1", Text = "reminder 1" }, 
       new SelectListItem { Value = "2", Text = "reminder 2" }, 
      }, 
     }, 
     new Reminders 
     { 
      Reminder = new List<SelectListItem> 
      { 
       new SelectListItem { Value = "1", Text = "reminder 1" }, 
       new SelectListItem { Value = "2", Text = "reminder 2" }, 
       new SelectListItem { Value = "3", Text = "reminder 3" }, 
      }, 
     } 
    }; 
    return View(reminders); 
} 

次に、あなたのビューでは、単に希望:

@model IEnumerable<AppName.Models.Reminders> 
@using (Html.BeginForm()) 
{ 
    @Html.EditorForModel() 
    <input type="submit" value="OK" /> 
} 

と、対応するエディタのテンプレート( ~/Views/Home/EditorTemplates/Reminders.cshtml):

@model AppName.Models.Reminders 
@Html.DropDownListFor(
    x => x.SelectedReminder, 
    new SelectList(Model.Reminder, "Value", "Text") 
) 

あなたはそこにビューモデルの2つの要素がcorrecでそれぞれを2つのドロップダウンを生成されます送信されますのであなたが投稿したときに、対応する選択された値が得られるようにします:

<select name="[0].SelectedReminder"> 
    <option value="1">reminder 1</option> 
    <option value="2">reminder 2</option> 
</select> 

<select name="[1].SelectedReminder"> 
    <option value="1">reminder 1</option> 
    <option value="2">reminder 2</option> 
    <option value="3">reminder 3</option> 
</select> 
+0

私の見解は少し違っているので問題を起こしています。私の強力なタイプのビューは、OPに投稿したReminderクラスの内容を含むReminderViewModelsのListを含むViewModelです。だから、アラームクラスは実際に私のViewModelです。 – chobo2

+0

また、ReminderViewModelには、他のselectList項目が含まれ、必要な他のドロップダウンリストを生成することを追加する必要があります。 – chobo2

+0

@ chobo2、この場合は '@ Html.EditorForModel()'の代わりに '@ Html.EditorFor(x => x.ReminderViewModels)'となります。ここで 'ReminderViewModels'はあなたのビューモデルの型のプロパティです'IEnumerable '。次に、フォームの中に他の 'EditorFor'を置くこともできます。 –