【问题标题】:File Upload Causes Model Validation to Fail文件上传导致模型验证失败
【发布时间】:2023-03-09 04:35:01
【问题描述】:

我有一个 MVC3 表单绑定到带有文件上传控件的模型。 (为简洁起见,删除了额外的 HTML):

@model Models.MessageModel

<script type="text/javascript">
    var numAttachments = 0;
    $(function () {
        $(".add-attachment").click(function () {
            $(".attachments").append("<div><input type=\"file\" name=\"attachments\" id=\"attachment" + numAttachments + "\" /></div>");
        });
    });
</script>

@using (Html.BeginForm())
{
    @Html.ValidationSummary()
        <div class="field-label">Subject:
            @Html.EditorFor(model => model.Subject)
        </div>
        <div class="attachments">
        </div>
        <div>
            <a href="javascript:void(0);" class="add-attachment">Add Attachment</a>
        </div>
        <div class="message-text">@Html.TextAreaFor(model => model.Text, new { cols = 107, rows = 10 })</div>
        <input type="submit" value="Send Message" />
    </div>
}

用户可以通过点击“添加附件”链接选择添加多个附件,附件不是必需的。

我的模型如下:

public class MessageModel
{
    [Required]
    public string Subject { get; set; }

    [Required]
    public string Text { get; set; }

    public IEnumerable<HttpPostedFileBase> Attachments { get; set; }
}

(注意:我也尝试将附件从模型中移出,放入我的操作方法的参数中,结果相同)

我的行动:

[HttpPost]
public ActionResult New(MessageModel message)
{
    // this check passes if no file is uploaded
    // but once a file is uploaded, this evaluates to false
    // even if the model is valid
    if (ModelState.IsValid) 
    {
        // do stuff
    }
}

当没有选择要上传的文件时,此表单可以正常工作并且验证通过。当我选择要上传的文件时,ModelState.IsValid 变为 false。如何使验证忽略上传的文件?

【问题讨论】:

    标签: c# asp.net-mvc-3 validation file-upload


    【解决方案1】:

    您需要确保您的表单使用正确的“enctype”。

    @using (Html.BeginForm("New", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" }))
    

    MVC 3 file upload and model binding

    【讨论】:

    • 我的用的是这个enctype,我还是有这个问题
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2019-03-05
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多