在ASP.NET MVC2中发布自定义集合

时间:2010-12-16 09:52:23

标签: asp.net-mvc

我有一个类似BookCover的通用枚举,我不想向用户显示。他们只能从现有的选择中选择一本书籍封面。

 public class BookCover {
        public bool IsSelected { get; set; }
        public string CoverPathThumb { get; set; }
        public string SpinePathThumb { get; set; }
        public string BackPathThumb { get; set; }
    }

我的行动方法类似于

  

公共ActionResult   SelectCover(IEnumerable的< BookCover>   覆盖);

在我的模板中,我只是枚举并写出所需的HTML,但问题是我不知道如何从帖子中获取数据。

如何命名我的< input> ID的?还有另一个原因是IEnumerabme在回发后没有填充吗?

4 个答案:

答案 0 :(得分:2)

@ Vince :您可以自定义ModelBinder。在ModelBinder中,您可以从HttpContext.Request.Form获取数据,之后您将构建新的BookCover集合。你最后打电话给

public ActionResult SelectCover(IEnumerable<BookCover> covers);

请记住在Global.asax中将其注册为:

ModelBinders.Binders[typeof(IEnumerable<BookCover>)] = new YourModelBinderName();

您可以在herehere处获得有关它的讨论。希望这能帮到你!

答案 1 :(得分:0)

您应该添加BookCover类型的ID,然后使用此ID来标识用户选择的封面。如果您从数据库中检索封面,只需在您的班级中使用此ID。

答案 2 :(得分:0)

我认为你可以这样做:

<% foreach(var item in covers) { %>
     <%: Html.EditorFor(x => item.IsSelected) %>
<% } %>

答案 3 :(得分:0)

输入的名称应采用以下格式:

covers[0].IsSelected
covers[0].CoverPathThumb
covers[0].SpinePathThumb 
covers[0].BackPathThumb 

E.g。

<input type="text" name="covers[0].CoverPathThumb" />

每个封面条目增加0。