Asp.net mvc MVC:我使用MultiSelectList,当我选择两个值时,它只发送一个值?
我在项目中使用MVC Viewmodel,我的问题是,即使在列表框中按CTRL键单击两个值,它也只会获取一个值。我希望用户能够选择两个值,但我不知道为什么它不会发生任何提示是赞赏 这是我的控制器中的GET n POST操作: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
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"]