MVC: я использую MultiSelectList, и когда я выбираю два значения, он просто отправляет одно значение? - PullRequest
0 голосов
/ 01 марта 2012

Я использую MVC-Viewmodel в своем проекте, моя проблема в том, что даже если я щелкну по CTRL два значения в моем списке, он получит только одно значение.Я хочу, чтобы пользователи могли выбирать два значения, но я не знаю, почему этого не происходит, приветствуются любые советы!

Вот мое действие GET n POST внутри моего контроллера:

public ActionResult Create()
{          
    CreateViewModel model = new CreateViewModel();
    List<CoreValue> corevalues = Arep.getallC();
    model.CoreValuess = new MultiSelectList(corevalues, "CID", "Cname");  
    return View(model);

} 

[HttpPost]
public ActionResult Create(CreateViewModel model)
{
    if (ModelState.IsValid)
    {
        Question q = new Question();

      var CoreValueID = int.Parse(model.Cname);
      var getallC = Arep.getbycid(CoreValueID);

      q.CoreValue.Add(getallC);
      q.QuestionText = model.QuestionText;
      Arep.addquestion(q);
      Arep.save();


        return RedirectToAction("Index");
    }
    return View(model);

Этовнутри моего CreateViewModel:

public MultiSelectList CoreValues { get; set; }

И это внутри моего представления:

 @Html.ListBoxFor(model => model.Cname,Model.Corevaluess)

В чем проблема?

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

С наилучшими пожеланиями

Ответы [ 3 ]

1 голос
/ 06 марта 2012

За исключением орфографических ошибок, я полагаю, что причина этого заключается в следующем:

В вашем методе ListBoxFor вы используете model.Cname. Под этим я полагаю, что вы имеете в виду «выбрать cName для выбранных значений CoreValues». Однако (и я предполагаю, что я не вижу вашу модель), свойство Cname в CreateViewModel имеет тип string. Из-за этого вы будете иметь только одно значение за раз. Вам нужно свойство типа IEnumerable для хранения нескольких выборок.

Обновите вашу модель до следующего:

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

SelectedValues ​​будет использоваться для хранения выбранных значений в сообщении. Мы также можем добавить элементы к нему, чтобы указать, что должно быть автоматически выбрано при создании представления.

В вашем контроллере сделайте следующее:

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

Наконец, обновите представление:

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

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

РЕДАКТИРОВАТЬ: Я не совсем уверен, что некоторые из ваших методов делают, поэтому я предполагаю.

Метод POST для создания:

[HttpPost]
public ActionResult Create(CreateViewModel model)
{
    if (ModelState.IsValid)
    {
        foreach(var CoreValueID in model.SelectedValues)
        {
            Question q = new Question();

            var getallC = Arep.getbycid(CoreValueID);

            q.CoreValue.Add(getallC);
            q.QuestionText = model.QuestionText;
            Arep.addquestion(q);
        }

        Arep.save();

        return RedirectToAction("Index");
    }
    return View(model);
}
0 голосов
/ 11 января 2015

Как указано выше, ASP.Net Mvc хочет иметь список строк, но то же самое можно сделать с помощью классического стиля ASP

Request.Form["CoreValues"]

это обеспечит значения, разделенные запятыми.

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

вам нужно будет передать выбранные значения, как показано ниже

List<CoreValue> selectedvalues = Null;
model.CoreValuess = new MultiSelectList(corevalues, "CID", "Cname",selectedvalues);  
return View(model);

Ссылка ссылка MSDN и эта полезная статья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...