我有一个问题是获得多选下拉列表值.任何人都建议我如何获得选择多个下拉列表值以及如何在控制器中获取它们.
我的代码是这样的: -
模型
public string BusinessUnitSiteSafetyRepresentative { get; set; }
Run Code Online (Sandbox Code Playgroud)
调节器
[HttpPost]
public ActionResult AddClientBusinessUnitSite(LocalAddClientBusinessUnitSite local)
{
var query = from o in entitydb.systemusersorganizations.toList()
from c in entitydb.contacts.toList()
where o.orgId == clientId
select new SelectListItem
{
Text = c. Name;
Value = c.OrgId.toString()
}
ViewBag.list1 = query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
好吧,如果选择单个值并且可以保存到DB,我可以得到.但是如何选择多个值以及在Controller中获取它们以便保存它们.
注意: - 我正在从DB中检索下拉列表值,如上所示.
视图
@Html.ListBoxFor(x => Model.BusinessUnitSiteSafetyRepresentative,new
MultiSelectList((IEnumerable<SelectListItem>)@Viewbag.list1)
Run Code Online (Sandbox Code Playgroud)
我已经通过了一些例子,但没有一个帮助过我.请帮助我.
Evo*_*net 28
我建议你的模型需要与多选列表中的项目有一对多的关系.
一个例子是带有多个标签的博客:
您的博客模型可能如下所示:
public class Blog
{
public Blog()
{
Tags = new List<Tag>();
}
public string BlogTitle{ get; set; }
public string Body{ get; set; }
public virtual ICollection<Tag> Tags{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你的标签模型是这样的:
public int TagID{ get; set; }
public string TagName{ get; set; }
public virtual ICollection<Blog> Blogs{ get; set; }
Run Code Online (Sandbox Code Playgroud)
现在我建议你使用一个视图模型:
public class BlogViewModel
{
public Blog blog{ get; set; }
public List<int> SelectedTags { get; set; }
public virtual List<Tag> Tags{ get; set; }
public BlogViewModel()
{
}
public BlogViewModel(Blog _blog, List<Tag> _Tags)
{
blog = _blog;
Tags = _Tags;
SelectedTags = new List<int>();
}
}
Run Code Online (Sandbox Code Playgroud)
最后在你的View中(继承自ViewModel);
@Html.ListBoxFor(m => m.SelectedTags,
new MultiSelectList(Model.Tags, "TagID", "Tag")
, null)
Run Code Online (Sandbox Code Playgroud)
JQuery Chosen插件非常适合这个http://harvesthq.github.io/chosen/.你可以用它来:
@Html.ListBoxFor(m => m.SelectedTags,
new MultiSelectList(Model.Tags, "TagID", "Tag")
, new { @class = "chzn-select", data_placeholder = "Tags..." })
Run Code Online (Sandbox Code Playgroud)
用您自己的型号和控制器替换它,这应该可以解决您的问题.此外,这将在您的表单中用于创建新的博客帖子,以及用于编辑现有帖子(添加和删除标签)
编辑:
在您的博客创建控制器操作中,您将其填充为:
public ActionResult Create()
{
var blog = new Blog();
var AllTags = from t in db.Tags
select t;
BlogViewModel viewModel = new BlogViewModel(blog,
Tags.ToList());
return View(viewModel);
}
public ActionResult Create(BlogViewModel blogViewModel)
{
Blog blog = blogViewModel.blog;
if (blogViewModel.SelectedTags != null)
{
foreach (var TagID in blogViewModel.SelectedTags)
{
Tag tag = db.Tags.Where(t => t.TagID == TagID).First();
blog.Tags.Add(tag);
}
}
db.Blog.Add(blog);
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
尝试将modelproperty更改为列表类型以接受多个值:
public IEnumerable<string> BusinessUnitSiteSafetyRepresentative { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55782 次 |
| 最近记录: |