我有一个以下的视图模型,它将由我正在使用的搜索控件使用.
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); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。