Загрузка файла с модальным ускорением на Asp.net ядро 2.1

#ajax #asp.net-core #file-upload #bootstrap-modal #asp.net-ajax

#ajax #asp.net-ядро #загрузка файла #bootstrap-модальный #asp.net-ajax

Вопрос:

Я хочу загрузить файл и отправить его по электронной почте. Но я не вижу, как это сделать с помощью Bootsrap Modal.

Если вам нужна какая-либо другая информация, скажите мне.

Я хотел бы отправить прикрепленный файл по электронной почте, а затем интегрировать его в свою базу данных и иметь возможность загружать его.

/[…] / ==> Код, который я не добавлял, бесполезен.

Редактировать: иначе как поступить с Ajax?

Мое мнение :

 <form name="contact" method="post" asp-action="Validation">
@if (ViewBag.Alert != null amp;amp; ViewBag.Alert != "")
{
    <div class="alert role="alert">
        @ViewBag.Alert
    </div>
}
<div class="details">
    <h3 class="title">Demande</h3>
    <label for="card">Type *</label>
    <select required onchange="contact()" class=" form-control" disabled="true" name="type" value="@ViewBag.Form.Type">
        <option value="1">Choose 1</option>
        <option value="2">Choose 2</option>
    </select>
    <label for="card">Origine *</label>
    <select required class="form-control" name="origine" value="@ViewBag.Form.Origine">
        <option value="1">Origine 1</option>
        <option value="2">Origine 2</option>
        <option value="3">Origine 3</option>
    </select>
    /*[...]*/
    <input type="hidden" name="Id" value="@ViewBag.Form.Id" />
    <input type="hidden" name="Price" value="@ViewBag.Form.Price" />
    /*[...]*/
    <textarea class="form-control" name="Response" placeholder="Response..."></textarea>
    <button required class="btn" onclick="modal_response()" data-whatever="getbootstrap" data-toggle="modal" data-target="#modal_contact" type="button">Response</button>
    <label for="card" class="right">Response send</label><br />
    <button required class="btn_second" onclick="modal_save()" data-whatever="getbootstrap" data-toggle="modal" data-target="#modal_contact_save" type="button">Save</button>
    <label for="card-holder" class="right">Save Ok!</label>
    /*[...]*/
    <div class="form-row">
        <button class="btn-primary" onclick="form_confirmation()" type="submit">Save All</button>
        <button class="btn-secondary" type="reset" onclick="location.href = '@Url.Action("List", "Control", new { id = ViewBag.Id })';">Close</button>
    </div>
</div>
</form>

/* When I click on "Response" a new window open */

<div class="modal fade" id="modal_contact" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <h5 class="modal-title" id="modal_label">Send email to : @ViewBag.Form.Name</h5>
            <button type="button" class="close" data-dismiss="modal"></button>
    </div>
    <div class="modal-body">
        <form id="modal_contact_form" enctype = "multipart/form-data" method="post" action="@Url.Action("Modal_contact", "Control")">
            <div class="form-group">
                <input type="file" name="file" accept="application/pdf" /><br /><br />
                <textarea class="form-control" name="Description" required placeholder="Content">@ViewBag.Response</textarea>
            </div>
            <input type="hidden" name="Id" value="ID" hidden />
            <input type="hidden" name="Price" value="@ViewBag.Form.Price" hidden />
            <input type="hidden" name="Type" value="@ViewBag.Form.Type" hidden />
            /*[...]*/
            <input type="submit" hidden />
        </form>
    </div>
    <div class="modal-footer">
        <button type="button" class="btn-secondary" data-dismiss="modal">Close</button>
        <button type="submit" data-dismiss="modal" onclick="$('#modal_contact_form').submit();" class="btn-primary">Send Email</button>
    </div>
</div>

  

Мой контроллер :

 public class MyController : BaseEntity
{
    [Required]
    public string Id { get; set; }
    public string Price { get; set; }
    public string Type { get; set; }
    /*[...]*/

    /* For File I don't know if it's good?? */
    public IformFile File { get; set; }
}
  

Моя модель :

 public ActionResult Modal_contact(MyController model)
{
    /* How to retrieve file ?? */
    bool ok = false;
    OtherController OC = new OtherController();
    /*[...]*/
    if (ModelState.IsValid)
    {
        OC = othercontrollerRepository.Find(model.Id);
        OC.Email = this.Session_get("Email");
        OC.Description = "";
        model.Email = this.Session_get("Email");
        model.Status = "1";
        model.View = "response";
        /*[...]*/
        if (mycontrollerRepository.Add(model) amp;amp; othercontrollerRepository.Update(OC))
        {
            /* How to send file to email and save file to folder in my project to add in my database ? */
            MailManager mail = new MailManager();
            Modele modele = new Modele();
            modele= modeleRepository.Find("response");

            ok = mail.send(modele.Objet, model.Description, OC.Email);
        }
               
        return Json(new { Json_result = ok, Redirect = "" });
    }   
        return Json(new { Json_result = false, Redirect = "" });
    }
  

Я нашел свою ошибку:
Form перед <div>

Ответ №1:

Я попробовал ваш код и воспроизвел вашу проблему. Я заметил, что вы назвали объект IFormFile как File .

public IFormFile File { get; set; }

Но входной файл, который вы получаете, называется file .

<input type="file" name="file" accept="application/pdf"/><br /><br />

Asp.net привязка базовой модели свяжет свойство в соответствии с входным именем. Именно по этой причине вы не смогли получить значение IFormFile в контроллере.

Чтобы решить эту проблему, вы должны изменить имя входных данных на File, чтобы они могли совпадать друг с другом.

Как показано ниже:

 <input type="file" name="File" accept="application/pdf"/><br /><br />
  

Результат:

введите описание изображения здесь

Комментарии:

1. Спасибо за ваш ответ, но я использовал Boostrap Modal, и с этим он не работает…

2. Не могли бы вы, пожалуйста, сказать мне, что вы имеете в виду, когда не работает? Вы не смогли получить действие File в контроллере?

3. Точно, я не смог получить действие File в контроллере! И это связано с использованием Boostrap Modal