asp.net-mvc – MVC 3 – 使用List类型属性绑定到复杂类型
发布时间:2020-12-16 06:58:51 所属栏目:asp.Net 来源:网络整理
导读:我有一个以下的视图模型,它将由我正在使用的搜索控件使用. public class SearchViewModel{ public SearchViewModel() { SearchLocation = new SearchLocationViewModel(); SearchCategories = new SearchCategoriesViewModel(); } public SearchLocationView
我有一个以下的视图模型,它将由我正在使用的搜索控件使用.
public class SearchViewModel { public SearchViewModel() { SearchLocation = new SearchLocationViewModel(); SearchCategories = new SearchCategoriesViewModel(); } public SearchLocationViewModel SearchLocation { get; set; } public SearchCategoriesViewModel SearchCategories { get; set; } } 现在,SearchCategoriesViewModel具有以下结构: public class SearchCategoriesViewModel { [Display(Name = "Categories")] public IList<SearchCategoryViewModel> Categories { get; set; } public SearchCategoriesViewModel() { Categories = new List<SearchCategoryViewModel>(); } } 最后,搜索类别视图模型具有以下结构: public class SearchCategoryViewModel { [Required] [Display(Name="Id")] public int Id { get; set; } [Display(Name="Name")] public String Name { get; set; } public bool IsSelected { get; set; } } 当我提交搜索请求时,SearchLocationViewModel会提交已提交的参数,但SearchCategoriesViewModel会显示为空(非空). 下面是我的SearchCategoryViewModel的编辑器模板: @model MyDLL.WebUI.Models.SearchCategoriesViewModel @foreach (var c in Model.Categories) { @Html.Label(c.Name); @Html.CheckBox(c.Name,c.IsSelected); } 我使用以下视图来生成搜索控件: @using (Html.BeginForm()) { @Html.ValidationSummary(true) <div id="search"> @Html.EditorFor(m => m.SearchCategories,"SearchCategory") @Html.EditorFor(m => m.SearchLocation,"SearchLocation") </div> <p> <input type="submit" value="Create" /> </p> } 我最终得到以下标记: <h2>Search</h2> <form action="/Settings/Search" method="post"> <label for="SearchCategories_Professional">Professional</label> <input id="SearchCategories_Professional" name="SearchCategories.Professional" type="checkbox" value="true" /> <input name="SearchCategories.Professional" type="hidden" value="false" /> <label for="SearchCategories_Associate">Associate</label><input id="SearchCategories_Associate" name="SearchCategories.Associate" type="checkbox" value="true" /> <input name="SearchCategories.Associate" type="hidden" value="false" /> <p> <input type="submit" value="Create" /> </p> </form> 我怀疑参数没有通过,因为生成的标记是错误的.你们有没有尝试从复杂的对象生成部分视图?我不想传递IEnumerable,我宁愿将它封装在一个单独的类中,以便我可以在将来扩展/删除它. 谢谢 解决方法
因为您有一个静态列表,所以您可以快速破解创建将正确绑定的标记的方法:
@model MyDLL.WebUI.Models.SearchCategoriesViewModel @{ var i = 0; } @foreach (var c in Model.Categories) { @Html.Hidden("Categories[" + i.ToString() + "].Id",c.Id); @Html.Hidden("Categories[" + i.ToString() + "].Name",c.Name); @Html.Label(c.Name); @Html.CheckBox("Categories[" + i.ToString() + "].IsSelected",c.IsSelected); } 这是一个快速而丑陋的解决方案.但是,我建议您重新考虑如何在局部视图中生成标记. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读