Asp.net mvc MVC:我使用MultiSelectList,当我选择两个值时,它只发送一个值?

Asp.net mvc MVC:我使用MultiSelectList,当我选择两个值时,它只发送一个值?,asp.net-mvc,asp.net-mvc-3,entity-framework,listbox,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,Listbox,我在项目中使用MVC Viewmodel,我的问题是,即使在列表框中按CTRL键单击两个值,它也只会获取一个值。我希望用户能够选择两个值,但我不知道为什么它不会发生任何提示是赞赏 这是我的控制器中的GET n POST操作: public ActionResult Create() { CreateViewModel model = new CreateViewModel(); List<CoreValue> corevalues = Arep.g

我在项目中使用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);
这是我的观点:

 @Html.ListBoxFor(model => model.Cname,Model.Corevaluess)
有什么问题吗

提前谢谢

致意

您需要按如下方式传递所选的值

List selectedvalues=Null;
model.CoreValuess=新的多选列表(corevalues,“CID”,“Cname”,selectedvalues);
返回视图(模型);

抛开拼写错误不谈,我认为以下是失败的原因:

在ListBoxFor方法中,您使用的是model.Cname。我相信您的意思是“选择所选核心价值的cName”。但是(我猜是因为我看不到您的模型),CreateViewModel上的Cname属性是string类型。因此,一次只能有一个值。您需要IEnumerable类型的属性才能保存多个选择

将您的模型更新为以下内容:

public class CreateViewModel
{
    public IEnumerable<string> SelectedValues { get; set; } 
    public IEnumerable<CoreValue> CoreValues { get; set; }
}
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);
}

如上所述,ASP.NETMVC希望有一个字符串列表,但使用经典的ASP样式也可以实现同样的目的

Request.Form["CoreValues"]

这将提供逗号分隔的值。

Actionresult创建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);
}
Request.Form["CoreValues"]