MVC post model- Collection属性没有元素

时间:2014-01-10 17:44:55

标签: c# asp.net-mvc ado.net

<% using (Html.BeginForm("Action", "Controller", FormMethod.Post))
 {%>
<%: Html.AntiForgeryToken()%>
<%: Html.HiddenFor(m=>m.Id) %>
<% for (int i = 0; i < Model.CollectionOfItems.Count; i++)
   {%>
  <%: Html.HiddenFor(m =>Model.CollectionOfItems.ToList()[i].Id)%>
  <%: Html.HiddenFor(m =>Model.CollectionOfItems.ToList()[i].Name)%>
  <%: Html.EditorFor( m => Model.CollectionOfItems.ToList()[i].NumbersToState)%>
 <%} %>
  <input type="submit" value="submit"/>
<%} %>

问题是当我将模型发布到Controller操作时。 &#34; CollectionOfItems&#34;的计数是0.模型状态有效且没有编译错误。

编辑1:我收到了属性模型 - Id。 编辑2:控制器动作

 [HttpPost]
       [ValidateAntiForgeryToken]
        public ActionResult Action(Model ReceivedModel)
        {
            try
            {
               //here i have break point to check value of ReceivedModel
              // here i can read the value id of the received model - for ex.: 5
            }
            catch (Exception)
            {
                return ""
            }
        }

编辑3: 模型是来自ADO实体数据模型的实体

public partial class Model
    {
        public Model()
        {
            this.CollectionOfItems= new HashSet<Items>();
        }
        public int Id{ get; set; }
        public virtual ICollection<Items> CollectionOfItems{ get; set; }
    }

编辑4:

这是foreach循环的结果

<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." name="[0].Id" type="hidden" value="21">

3 个答案:

答案 0 :(得分:3)

.ToList()正在破坏与父对象的绑定。

这是ViewModel概念显示其价值的一个地方(很多)。如果您引入一个,并使用该Model对象进行水合(而不是仅将数据模型用作视图模型),您应该能够超越它。

此方案的示例ViewModel:

public class ViewModel1 // Find a better name ;)
{
    public ViewModel1 ()
    {
    }
    public int Id{ get; set; }
    public List<Items> Items{ get; set; }
}

答案 1 :(得分:1)

我有类似的问题。问题是每个字段的$domDocument = new DOMDocument(); $domDocument->loadXML( $xml ); $value = $domDocument->getElementsByTagName( "suggestion" ); foreach ( $value as $e ) { echo $e->getAttribute( "data" )."<br>"; } 属性。每个Name必须是唯一的,并且与模型正确对应。以下是您发布ICollection所需的内容。

Name

答案 2 :(得分:0)

在使用集合时遇到模型绑定问题,请确保正确设置集合的名称,以使模型绑定起作用。

这是有趣的,它可以帮助您解决问题http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/