【问题标题】:Posting back custom collections in ASP.NET MVC2在 ASP.NET MVC2 中回发自定义集合
【发布时间】:2010-12-16 20:15:39
【问题描述】:

我有一个 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 封面);

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

如何命名我的 id?当回发发生时,IEnumerabme 没有填充是否还有其他原因?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

    public ActionResult SelectCover(IEnumerable<BookCover> covers);
    

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

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

    您可以在here 获得参考,here 正在讨论它。希望对您有所帮助!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我认为你可以这样做:

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

        【讨论】:

          【解决方案4】:

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

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

          例如

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

          每个封面条目增加 0。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-21
            • 1970-01-01
            • 2011-02-21
            • 1970-01-01
            • 1970-01-01
            • 2011-03-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多