1

내 프로젝트에서 먼저 MVC3 EF 모델을 사용하고 있습니다.MVC : 사용자가 편집 페이지에있을 때 목록 상자에서 선택된 값

사용자가 질문을 만들면 ListBox에서 여러 CoreValues를 선택할 수 있습니다. 사용자가 편집 페이지로 이동하여 질문에 대한 CoreValues를 변경하면 목록 상자에 이미 그 corevalues가 어떻게 선택되었는지에 대한 아이디어가 이미 선택되어 있습니다.

이 내 뷰 모델입니다 :

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 }