为什么MVC模型绑定需要集合索引?

时间:2014-08-07 19:46:26

标签: c# asp.net-mvc model-binding

处理一个项目,该项目要求我在同一屏幕上拥有许多相关数据集合。

示例结构:

public class QuestionViewModel
{
    public string UserName {get; set;}
    public IEnumerable<Question> Questions {get; set;}
}

public class Question
{
    public string Text {get; set;}
    public string Answer {get; set}
    //Yes, in this example attachments are directly related to the question and not
    //a parent entity
    public IEnumerable<AttachmentInfo> Attachments {get; set;}
}

public class AttachmentInfo
{
    public string Description {get; set;}
    public HttpPostedFileBase PostedFile {get; set;}
}

使用上述结构,您最终会得到类似于:

的标记
<input type="file" name="model.Questions[0].Attachments[0].Description" />
<input type="file" name="model.Questions[0].Attachments[0].PostedFile " />

要添加其他附件,您必须适当更新索引,如下所示:

<input type="text" name="model.Questions[0].Attachments[1].Description" />
<input type="file" name="model.Questions[0].Attachments[1].PostedFile " />

为什么模型绑定会像这样工作?

我已经找到了一个特定的原因,模型绑定就像这样,但我找不到任何东西,也无法想到使用像model.Questions.Attachments.Description之类的模式无法正常工作的情况。模型绑定到IEnumerable<string>已经对简单类型做了类似的事情,如果它们的输入元素具有分配给它们的相同名称。

0 个答案:

没有答案