Html BeginForm发布模型空

时间:2014-05-06 09:29:45

标签: razor model controller asp.net-mvc-5

我生成一个包含模型数据的div列表。我需要从选定的div中获取数据。所以我的解决方案是将html.beginform放入for循环中,所以当其中一个表单被提交时,我可以得到post数据。 模特:

   public class yDul
    {
        public List<Uc[]> u { get; set; }
        public matrixB matrixblg { get; set; }
    }

public class Uc
{
    public List<UcAk> Ay = new List<UcAk>();
    public List<UcUi> Ba = new List<UcUi>();
    public double NetTutar;
}

HTML:

@for (int l = 0; l < Model.u.Count; l++)
{

    @using (Html.BeginForm("secilen", "U"))
    {
        <li class="liuc">
            @Html.DisplayFor(m => m.u[l][0].NetTutar)
            </div>
        </li>
    <input type="submit" value=@Resources.sec class="choose">
    }
}

当我这样做时,模型被传回NULL。它产生了50-60个列表项,并且在li里面实际上有接近15-20个属性(为了便于阅读,我简化了它)。如何获取所选表单上的数据?

1 个答案:

答案 0 :(得分:1)

问题是序列化到请求正文中并且回发的唯一元素是

input
select
button
textarea

由于你的循环只生成li标签,因此它们不会被序列化。

要重新获取数据,您可以使用隐藏的输入

@for (int l = 0; l < Model.u.Count; l++)
{

    @using (Html.BeginForm("secilen", "U"))
    {
        <li class="liuc">
            @Html.HiddenFor(m => m.u[l][0].NetTutar)
            @Html.DisplayFor(m => m.u[l][0].NetTutar)
            </div>
        </li>
        <input type="submit" value=@Resources.sec class="choose">
    }
}

要注意的另一件事是你正在使用一个数组,这可能会导致模型绑定器的问题除了第一个条目之外没有绑定任何东西

阅读Phil Haacked的这篇文章,了解如何解决这个问题

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/