выбор и добавление нескольких значений с помощью IEnumerable в MVC

Я пытаюсь использовать IEnumerable, чтобы он содержал несколько вариантов выбора, чтобы пользователь мог выбрать более одного значения в моем списке.

Вот как выглядит моя ViewModel:

    public class CreateViewModel
{
    public IEnumerable<string> SelectedValues { get; set; } 
    public IEnumerable<CoreValue> CoreValues { get; set; }
}

Это мой GET в моем контроллере:

public ActionResult Create()
{          
    CreateViewModel model = new CreateViewModel();
    model.CoreValues = AdminRepository.GetAllCoreValues();
    return View(model);
}

Вот как выглядит мой взгляд:

@Html.ListBoxFor(m => m.SelectedValues, new MultiSelectList(Model.CoreValues, "Id", "Name"))

Как мне закодировать свое действие POST, чтобы SelectedValues ​​использовался для хранения выбранных значений в сообщении?

До Ienumerable у меня была строка, объявленная для CoreValueName в моей ViewModel, и я сделал что-то подобное в моем действии POST, которое отлично работало, но теперь я изменил его на Ienumerable, и я не уверен, как кодировать, поэтому мои выбранные значения будут использоваться для хранения выбранных ценности в моем посте.

Question question = new Question();
var CoreValueID = int.parse(model.CoreValueName);
var GetAllCoreValuesID = AdminRep.GetByCoreValueID(CoreValueID);             
question.CoreValue.Add(GetAllCoreValuesID);
AdminRepository.AddQuestion(question);
AdminRepository.save();

Эта версия моего действия POST работает отлично, потому что модель SubjectType объявлена ​​как строка в моей модели просмотра:

    [HttpPost]
        public ActionResult Create(AdminCreateViewModel model)
        {

                Question question = new Question();       
                var SubjectTypeID = int.Parse(model.SubjecTypeName);
                var GetAllSubjecTypesID = AdminRep.GetBySubjectTypeID(SubjectTypeID);
                question.SubjectType.Add(GetAllSubjecTypesID);
                AdminRep.AddQuestion(question);
                AdminRep.save();
        }

Эта версия моего действия Post не работает, потому что Model.Selectedvalues объявлен как Ienumerable строка в моей ViewModel. Я пытался int.parse мой model.SelectedValues, но это не работает с Ienumerable. А метод GetByCoreValueID принимает в качестве аргумента int, поэтому я понятия не имею, как это сделать. Мне нужен foreach?

 [HttpPost]
 public ActionResult Create(AdminCreateViewModel model)
 {
    Question question = new Question(); 
    var CoreValueID = model.SelectedValues;
    var GetAllCoreValuesID = AdminRep.GetByCoreValueID(CoreValueID); //
    question.CoreValue.Add(GetAllCoreValuesID);
    AdminRep.AddQuestion(question);
    AdminRep.save();

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


person Obsivus    schedule 13.03.2012    source источник


Ответы (1)


Вы можете сделать так, чтобы действие контроллера POST принимало модель представления в качестве аргумента. Тогда свойство SelectedValues будет содержать список значений, выбранных пользователем:

[HttpPost]
public ActionResult Index(CreateViewModel model)
{
    model.SelectedValues will cnotain the selected values from the user here
    ...
}
person Darin Dimitrov    schedule 13.03.2012
comment
О да, у меня есть ViewModel как параметр в моем действии POST. Но это модель. SelectedValues ​​не будет указывать выбранные значения от пользователя, здесь у меня проблемы с кодированием, так как его Ienumerable: / - person Obsivus; 13.03.2012
comment
@RammtinAvar, какие у тебя проблемы? Чего вы пытаетесь достичь? Я думал, вы спрашиваете, как вернуть выбранные значения в действии POST. - person Darin Dimitrov; 13.03.2012
comment
Я пытаюсь достичь, когда пользователь выбрал несколько значений из моего списка, я хочу добавить эти значения в свою базу данных, прежде чем они смогут просто добавить одно значение, но теперь должно быть возможно добавить несколько значений, поскольку я объявил Ienumerable selectedvalues ​​в моя модель просмотра, которая заполняется в моем действии GET всеми моими статическими значениями ядра в моей базе данных. Я не знаю, как добиться этого в моем действии POST. - person Obsivus; 13.03.2012
comment
@RammtinAvar, тогда ваш вопрос не имеет ничего общего с ASP.NET MVC. Это больше о проектировании базы данных и запросах к базе данных SQL. Я бы порекомендовал вам начать новый вопрос, в котором вы объясните схемы своей базы данных, технологию базы данных, которую вы используете для запроса базы данных, объясните, используете ли вы какой-либо ORM, а затем спросите, как обновить эту базу данных с учетом списка строк. - person Darin Dimitrov; 13.03.2012
comment
Я думаю, вы неправильно понимаете мою проблему. Я отредактирую свой вопрос внизу. :) - person Obsivus; 13.03.2012
comment
Я добился этого! Мне просто нужно было сделать цикл foreach, который преобразует каждый элемент в int, а затем использовать мой метод, чтобы получить все идентификаторы, а затем просто добавить их :) - person Obsivus; 13.03.2012