1

私のプロジェクトでMVC3 EFモデルを最初に使用しています。MVC:ユーザーが編集ページにいるときのリストボックスの選択値

ユーザーが質問を作成するとき、ユーザーはListBoxから複数のCoreValuesを選択できます。 ユーザーが編集ページに移動して質問のCoreValuesを変更すると、リストボックスにはすでにそれらのコア値が選択されています。

これは私のViewModelです:

public class AdminEditViewModel 
{ 
    public string QuestionText { get; set; } 
    public string SubjecTypeName { get; set; } 
    public string CoreValueName { get; set; } 
    public SelectList SubjectTypes { get; set; } 
    public IEnumerable<string> SelectedValuesOfCoreValues { get; set; } 
    public IEnumerable<CoreValue> CoreValues { get; set; } 
} 

、これは私のコントローラで私のGETとPOSTアクションです:

public ActionResult Edit(int id) 
{ 
      Question question = AdminRep.GetQuestionById(id); 
      AdminEditViewModel model = new AdminEditViewModel(); 
      List<SubjectType> subjectypes = AdminRep.GetAllSubjectTypesById(); 
      model.CoreValues = AdminRep.GetAllCorevaluesById(); 
      model.QuestionText = question.QuestionText; 
      model.SubjectTypes = new SelectList(subjectypes, "Id", "Name",question.SubjectType.First().Id); 


      return View(model); 
} 

     // 
     // POST: /Admin/Edit/5 

[HttpPost, ActionName("Edit")] 
public ActionResult EditConfirmed(int id, AdminEditViewModel model) 
{ 

      if (ModelState.IsValid) 
      { 
       Question question = AdminRep.GetQuestionById(id); 
       question.QuestionText = model.QuestionText; 
       question.SubjectType.Clear(); 
       question.CoreValue.Clear(); 
       foreach (var item in model.SelectedValuesOfCoreValues) 
       { 
        var CoreValueID = int.Parse(item); 
        var GetAllCoreValuesID = AdminRep.GetByCoreValueID(CoreValueID); 
        question.CoreValue.Add(GetAllCoreValuesID); 

       } 
       var SubjectTypeID = int.Parse(model.SubjecTypeName); 
       var getallS = AdminRep.GetBySubjectTypeID(SubjectTypeID); 
       question.SubjectType.Add(getallS); 
       AdminRep.save(); 
       return RedirectToAction("Index"); 
      }  
      return View(model); 
} 

と私のビュー:事前に

<div class="editor-field"> 
    @Html.ListBoxFor(m => m.SelectedValuesOfCoreValues, new MultiSelectList(Model.CoreValues, "Id", "Name"), new { @class = "selectstyle" }) 
    @Html.ValidationMessageFor(model => model.CoreValueName) 
</div> 

ありがとう!

+0

http://stackoverflow.com/questions/3194143/challenges-with-selecting-values-in-listboxfor –

答えて

0

アクションメソッドは、パラメータとしてFormCollectionを受け入れることができます。そのオブジェクトから必要なデータを取得する独自のロジックを作成できます。基本的にFormCollectionには、キーと値のペアとして送信されるフォーム内のすべてのフィールドが含まれます。

シグネチャは次のようになります。

[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(FormCollection form) { // logic here to } 
関連する問題