Rob*_*Rob 23 c# asp.net asp.net-mvc asp.net-mvc-3
我正在研究MVC3 Web应用程序.我想要一个从应用程序管理系统编辑blo时显示的类别列表.在我的viewmodel中,我为类别的selectlistitems列表定义了以下属性.
/// <summary>
/// The List of categories
/// </summary>
[Display(Name = "Categorie")]
public IEnumerable<SelectListItem> Categories { get; set; }
Run Code Online (Sandbox Code Playgroud)
下一步,我的控制器包含以下编辑操作,其中从数据库中填充selectlistitems列表.
public ActionResult Edit(Guid id)
{
var blogToEdit = _blogService.First(x => x.Id.Equals(id));
var listOfCategories = _categorieService.GetAll();
var selectList = listOfCategories.Select(x =>new SelectListItem{Text = x.Name, Value = x.Id.ToString(), Selected = x.Id.Equals(blogToEdit.Category.Id)}).ToList();
selectList.Insert(0, new SelectListItem{Text = Messages.SelectAnItem, Value = Messages.SelectAnItem});
var viewModel = new BlogModel
{
BlogId = blogToEdit.Id,
Active = blogToEdit.Actief,
Content = blogToEdit.Text,
Title = blogToEdit.Titel,
Categories = selectList //at this point i see the expected item being selected
//Categories = new IEnumerable<SelectListItem>(listOfCategories, "Id", "Naam", blogToEdit.CategorieId)
};
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
当我在返回视图之前设置断点时,我看到选择列表按照我的预期填充.所以在这一点上一切似乎都没问题.视图模型填充完全正确.然后在我看来(我正在使用Razor)我有以下两个规则应该为我呈现选择列表.
@Html.LabelFor(m => m.Categories) @Html.DropDownListFor(model=>model.Categories, Model.Categories, Model.CategoryId)
@Html.ValidationMessageFor(m => m.Categories)
Run Code Online (Sandbox Code Playgroud)
当我运行代码并打开视图来编辑我的博客时,我可以看到所有正确的数据.此外,选择列表也正确呈现,但我想要选择的项目丢失了它的选择.怎么会这样?直到与视图一起返回视图模型,一切都没问题.但是当我在浏览器中查看网页时,选择列表只有正确的选择.我在这里错过了什么?还是做错了?
Dar*_*rov 51
@Html.DropDownListFor(model=>model.Categories, Model.Categories, Model.CategoryId)
Run Code Online (Sandbox Code Playgroud)
在这里,您没有正确使用辅助方法.第一个参数必须是视图模型上的属性,该属性将包含当前选定的值.它应该是标量属性,而不是集合.
因此,在视图模型中,您需要添加此类属性:
[Display(Name = "Categorie")]
public IEnumerable<SelectListItem> Categories { get; set; }
public string SelectedValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
在你的控制器动作中:
var selectList = listOfCategories.Select(x => new SelectListItem {
Text = x.Name,
Value = x.Id.ToString()
}).ToList();
var viewModel = new BlogModel
{
BlogId = blogToEdit.Id,
Active = blogToEdit.Actief,
Content = blogToEdit.Text,
Title = blogToEdit.Titel,
Categories = selectList,
// this is what sets the selected value
SelectedValue = blogToEdit.Category.Id
};
Run Code Online (Sandbox Code Playgroud)
在您看来简单地说:
@Html.DropDownListFor(x => x.SelectedValue, Model.Categories)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67468 次 |
| 最近记录: |