MVC: выбранные значения в списке, когда пользователь находится на странице редактирования - PullRequest
1 голос
/ 19 марта 2012

Сначала я использую модель MVC3 EF в моем проекте.

Когда пользователь создает вопрос, он / она может выбрать несколько значений CoreValue из ListBox. Когда пользователь переходит на страницу редактирования, чтобы изменить значения 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>

Заранее спасибо!

1 Ответ

0 голосов
/ 19 марта 2012

вы можете заставить свой метод действия принимать FormCollection в качестве параметра. Затем вы можете написать свою собственную логику, чтобы извлечь из этого объекта все необходимые данные. По сути, FormCollection будет содержать все поля внутри формы, которые публикуются в виде пары ключ-значение.

Подпись будет выглядеть так:

[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(FormCollection form) {   // logic here to  } 
...