Asp.net mvc 3 用关联的实体填充列表框
我正在构建我的第一个管理代码片段的MVC(3)应用程序 显然,我有一个代码段的编辑页面,它有一种编程语言(0.*到0.1) 现在我的问题是,如何用现有的所有编程语言构建一个列表框,以便在编辑页面上显示一个代码段 我认为我可以创建一个ViewModel,并通过手动查询并将其作为列表传递来填充所有值,但我觉得构建MVC的人对此有一个更整洁的解决方案?我手头有Apress的“Pro MVC 3”和“Pro实体框架”,但似乎找不到答案 当我尝试时:Asp.net mvc 3 用关联的实体填充列表框,asp.net-mvc-3,entity-framework-4,Asp.net Mvc 3,Entity Framework 4,我正在构建我的第一个管理代码片段的MVC(3)应用程序 显然,我有一个代码段的编辑页面,它有一种编程语言(0.*到0.1) 现在我的问题是,如何用现有的所有编程语言构建一个列表框,以便在编辑页面上显示一个代码段 我认为我可以创建一个ViewModel,并通过手动查询并将其作为列表传递来填充所有值,但我觉得构建MVC的人对此有一个更整洁的解决方案?我手头有Apress的“Pro MVC 3”和“Pro实体框架”,但似乎找不到答案 当我尝试时: @Html.EditorFor(model =>
@Html.EditorFor(model => model.Language or model.Language.Name)
我会犯错误
提前感谢,感谢您的帮助 以下是我在类似情况下的做法: 1) 为编辑语言创建视图模型
public class LanguagesModel
{
public IEnumerable<int> SelectedLanguageIds { get; set; }
public MultiSelectList languages { get; set; }
}
公共类语言模型
{
公共IEnumerable SelectedLanguageId{get;set;}
公共多选列表语言{get;set;}
}
2) 在控制器中填充模型:
public ActionResult Index()
{
List<Language> languages = _languageService.GetLanguages();//however you get the languages from your datasource
var temp = new MultiSelectList(
languages.Select(l => new { Value = l.LanguageId.ToString(), Text = l.Name }),
"Value",
"Text");
LanguagesModel model = new LanguagesModel();
model.languages = temp;
return View(model);
}
public ActionResult Index()
{
List languages=\u languageService.GetLanguages();//但是您可以从数据源获取语言
var temp=新的多选列表(
languages.Select(l=>new{Value=l.LanguageId.ToString(),Text=l.Name}),
“价值”,
“文本”);
LanguagesModel模型=新的LanguagesModel();
model.languages=temp;
返回视图(模型);
}
3) 创建使用DropDownListFor辅助对象的视图:
@model LanguagesModel
@using (Html.BeginForm(Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })))
{
@Html.ValidationSummary(true)
<fieldset>
@Html.ListBoxFor(m => m.SelectedLanguageIds, Model.languages)
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
@模型语言模型
@使用(Html.BeginForm(Html.BeginForm(“Index”,“Home”,FormMethod.Post,new{enctype=“multipart/formdata”})))
{
@Html.ValidationSummary(true)
@ListBoxFor(m=>m.selectedLanguageId,Model.languages)
}
小心地用实际使用的操作和控制器替换“索引”和“主”
编辑将代码更改为使用ListBox而不是DropDownList。受达林·迪米特罗夫回答的启发
我想我可以创建一个视图模型
直截了当!这正是我建议你做的
但是,如果您想坚持使用您的域模型,您可以在视图中进行一些调整,以便能够使用ListBox帮助器(完全不推荐的解决方案,但由于您要求根据您的标准提供更整洁的解决方案):
@model Snippet
@Html.ListBox(
"SelectedIds",
new MultiSelectList(
Model.Languages.Select(l => new { Value = l.ID.Tostring(), Text = l.Name }),
"Value",
"Text"
)
)