httppostedfilebase является нулевым в модели - PullRequest
0 голосов
/ 25 июня 2018

Я использую сообщение ajax в своем проекте, даже если часть модели с изображением и текстом считается действительной в модели, дополнительные вложения равны нулю, а в части ошибки число ошибок равно количеству вложений, которые я отправляю бэкэнду, и кажется, как объект File ModelState.values ​​[8] Value.AttemptedValue = [файл объекта], [файл объекта], [файл объекта], [файл объекта], [файл объекта] .... и т. д.

мой контроллер

[HttpPost]
    public ActionResult CreateTheIdea(OneIdeaModel model)
    {
        string imgResult = "";
        string attachmentResult = "OK";
        if (ModelState.IsValid)
        {

        }
    }

мой взгляд

function sendBasicIdeaInfo() {

    var totalFiles = document.getElementById("coverImage").files.length;
    var covImg = document.getElementById("coverImage").files[0];

    newForm.append("title", $("#title").val());
    newForm.append("coverImage", covImg);
    newForm.append("description", encodeURI($("#description").val()));
    newForm.append("whyThis", encodeURI($("#whyThis").val()));
    newForm.append("detail", encodeURI($("#detail").val()));
    newForm.append("ideaType", encodeURI(ideaType));
    newForm.append("contentId", encodeURI(contentId));
    newForm.append("status", encodeURI(recordType));
    var totalFiles = document.getElementById("uploadBtn").files.length;
    console.log(totalFiles);
    if (totalFiles > 0) {
        for (var i = 0; i < totalFiles; i++) {
            files[i] = document.getElementById("uploadBtn").files[i];
            //console.log(files["name"]);
        }
        newForm.append("attachment", files);
        newForm.append("contentType", "@ContentTypeEnum.IDEA.ToString()");
        //newForm.append("contentId", newIdeaId);
    }

    $.ajax({
        type: 'post',
        url: '/@activeLanguage/Idea/CreateTheIdea',
        data: newForm,
        dataType: 'json',
        contentType: false,
        processData: false,
        success: function (response) {
            if (Number.isInteger(parseInt(response))) {
                complete();
            }
            else
            {
                openVSnackBar("@Resources.errAnError", "error");
            }
        },
        error: function (error) {
            openVSnackBar("@Resources.errAnError", "error");
        }
    });
}

моя модель

public class OneIdeaModel
{

    //Idea text part
    public int id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public string whyThis { get; set; }
    public string detail { get; set; }
    public string ideaType { get; set; }
    public string contentId { get; set; }
    public string status { get; set; }
    public int attachmentCount { get; set; }
    public string langCode { get; set; }
    public int userId { get; set; }

    //Idea attachment part
    public string contentType { get; set; }
    public virtual HttpPostedFileBase[] attachment { get; set; }
    public string fileType { get; set; }
    public string fileName { get; set; }

    //Idea image part
    public virtual HttpPostedFileBase thumbImage { get; set; }
    public virtual HttpPostedFileBase coverImage { get; set; }

    public bool isImageFormatValid(HttpPostedFileBase img)
    {
        List<string> types = new List<string>() { "jpeg", "jpg", "png" };
        if (types.Contains(img.FileName.Split('.')[img.FileName.Split('.').Length - 1].ToLower())) return true;
        else return false;
    }

    public bool isAttachmentFormatValid(HttpPostedFileBase attachment)
    {
        List<string> types = new List<string>() { "application/pdf", "text/plain", "application/vnd.ms-excel.sheet.binary.macroenabled.12", "application/vnd.ms-excel.addin.macroenabled.12", "application/vnd.ms-excel", "application/msword" };
        if (types.Contains(attachment.ContentType)) return true;
        else return false;
    }
}

Как я уже сказал, все ценности, кроме вложений. Это приходит ноль, почему. Если вы можете помочь, я был бы признателен, что

полезная нагрузка

------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="title"

123
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="coverImage";                     
filename="35205568_10156471428459494_5451669252295622656_n.jpg"
Content-Type: image/jpeg

------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="description"

123
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="whyThis"

123
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="detail"

123123123123
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="ideaType"

Category
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="contentId"

0
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="status"

PUBLISHED
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="attachment"

[object File],[object File],[object File]
------WebKitFormBoundaryJBAmObnu25KFXIzw
Content-Disposition: form-data; name="contentType"

IDEA
------WebKitFormBoundaryJBAmObnu25KFXIzw--

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Попробуйте это

if (totalFiles > 0) {
        newForm.append("numberOfAttachment", totalFiles);
        for (var i = 0; i < totalFiles; i++) {
            newForm.append("attachment[" + i + "]", document.getElementById("uploadBtn").files[i]);
        }
    }
0 голосов
/ 25 июня 2018

Предполагается, что вы пытаетесь загрузить несколько файлов и пытаетесь привязать свойство 'attachment'. Это будет код JavaScript для вашего дела -

function sendBasicIdeaInfo() {
    if (window.FormData !== undefined) {
        var totalFiles = document.getElementById("coverImage").files.length;
        var covImg = document.getElementById("coverImage").files[0];

        // Create FormData object
        var newForm = new FormData();

        newForm.append("title", $("#title").val());
        newForm.append("coverImage", covImg);
        newForm.append("description", encodeURI($("#description").val()));
        newForm.append("whyThis", encodeURI($("#whyThis").val()));
        newForm.append("detail", encodeURI($("#detail").val()));
        newForm.append("ideaType", encodeURI(ideaType));
        newForm.append("contentId", encodeURI(contentId));
        newForm.append("status", encodeURI(recordType));
        var totalFiles = document.getElementById("uploadBtn").files.length;
        console.log(totalFiles);
        if (totalFiles > 0) {
            for (var i = 0; i < totalFiles; i++) {
                files[i] = document.getElementById("uploadBtn").files[i];
                newForm.append("attachment", files[i]);         
                //console.log(files["name"]);
            }
            //newForm.append("attachment", files);
            //newForm.append("contentType", "@ContentTypeEnum.IDEA.ToString()");
            //newForm.append("contentId", newIdeaId);
        }

        $.ajax({
            type: 'POST',
            url: '/@activeLanguage/Idea/CreateTheIdea',
            data: newForm,
            contentType: false, // Not to set any content header
            processData: false, // Not to process data
            success: function(response) {
                if (Number.isInteger(parseInt(response))) {
                    complete();
                } else {
                    openVSnackBar("@Resources.errAnError", "error");
                }
            },
            error: function(error) {
                openVSnackBar("@Resources.errAnError", "error");
            }
        });
    } else {
        alert("FormData is not supported.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...