对于复杂数据类型,MVC控制器将参数返回为null

时间:2011-07-05 10:55:57

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

public class FileSubmissionModel
{
    public List<DraftFile> ValidFiles{ get ; set ;  }
    public List<DraftFile> InvalidFiles{ get ; set ;  }
}

其中:

public class DraftFile
{

    public Guid DraftId { get ; set ;  }
    public string OriginalFileName { get ; set ;  }
}

给出null:

[HttpPost]
public ActionResult Step2(FileSubmissionModel validFiles)
{
 ...
}

参数'validFiles.ValidFiles'&amp; 'validFiles.InvalidFiles'返回null。有谁知道为什么以及我能做些什么来纠正这个? 干杯, 皮特

按照要求查看代码...我已经剪掉了一些但你得到了要点:

@foreach (var item in Model.InvalidFiles)
        {
        count++;
        <tr>
            @Html.HiddenFor(model => model.InvalidFiles[count].DraftId) 
            @Html.HiddenFor(model => model.InvalidFiles[count].OriginalFileName ) 
        </tr>
        }

1 个答案:

答案 0 :(得分:1)

问题似乎是Step2方法 validFiles 的参数与 FileSubmissionModel 上的 ValidFiles 属性相同。

假设你在视图中做了类似的事情:

@for(var i = 0; i < 10; i++)
{
 <p>  @Html.EditorFor(model => model.ValidFiles[i].DraftId)</p>
}

该字段的名称将生成为 ValidFiles [0] .DraftId ,这是发回服务器的内容。

默认模型绑定器尝试绑定到参数而不是绑定到模型上的属性,因为名称相同,默认模型绑定器执行不区分大小写的匹配。

我现在的建议是更改方法参数的名称。