使用Bind的Include属性和HttpPostedFileBase

时间:2011-04-22 18:18:15

标签: asp.net-mvc-3

我有一个接受HttpPostedFileBase的动作,但是发布此文件的表单可能将输入命名为“File”或“FileToUpload”。由于我无法更改发布表单的文件输入名称,因此我将Bind属性的Include属性设置为我将接受的名称列表。

但是,当名为“File”的文件输入的表单发布到此操作时,FileToUpload参数为null。见下文。

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UploadFile([Bind(Include = "File,FileToUpload")] 
        HttpPostedFileBase FileToUpload)
    {
        // If the file was posted with the name "File", then FileToUpload is null
        return View();
    }

有谁可以解释为什么这样做?有什么我对Bind属性有误解吗?

1 个答案:

答案 0 :(得分:6)

绑定包括简单地说如果找到该属性的名称 - 然后绑定它,否则将其排除。由于它在您的情况下丢失,因此预期为空。想想我的模型是“客户”的情况,我只希望ModelBinder绑定到CustomerId和EmailAddress,并排除任何其他属性。在这种情况下,我会指定Bind [Include =“CustomerId,EmailAddress”] 但是 - 如果缺少EmailAddress,那么它仍然是null