ASP.net Загрузка файла MVC в Amazon S3 с прогрессом

#c# #asp.net-mvc #html-helper #flajaxian

#c# #asp.net-mvc #html-помощник #flajaxian

Вопрос:

Добрый день,

У меня есть ASP.net Приложение MVC, которому необходимо загружать файлы на Amazon S3 с прогрессом. Я нашел удобный элемент управления под названием Flajaxian, который выполняет эту работу довольно хорошо. Проблема в том, что теперь я хочу вставить строку данных в базу данных, которая отслеживает загрузки. Если вы посмотрите на приведенный ниже код, элемент управления имеет событие FileUploader1_ConfirmUpload, которое запускается после завершения загрузки. Url.Action(«Upload», «TracksController») выполняет не то, что я хочу, а именно запускает действие загрузки в контроллере TrackController. Я впервые работаю с MVC, поэтому надеюсь, что есть простое решение.

Изначально у меня была кнопка отправки для выполнения загрузки в коде, подобном этому <div class="submitBtnDiv"><input type="submit" value="Submit" class="submitBtn" id="trackAdd" /></div> . но теперь загрузка асинхронна, поэтому я хочу выполнить ту же обратную передачу

Спасибо всем, кто нашел время ознакомиться с этим, и еще больше тем, кто пытается решить эту проблему.

  <div class="contentsAcc"><form id="form2" runat="server" style="width:400px">
                <script runat="server">
                    private void FileUploader1_FileNameDetermining(object sender, FileNameDeterminingEventArgs e)
                    {
                        e.FileName = SessionWrapper.PersonId.ToString()   "_"   e.FileName;
                    }
                </script>
                <script runat="server">
                    private void FileUploader1_ConfirmUpload(object sender, ConfirmUploadEventArgs e)
                    {
                        Url.Action("Upload", "TracksController");                            
                    }
                </script>
                    <fjx:FileUploader ID="FileUploader1" runat="server">
                        <Adapters>
                            <fjx:DirectAmazonUploader   OnFileNameDetermining="FileUploader1_FileNameDetermining" OnConfirmUpload="FileUploader1_ConfirmUpload"
                                AccessKey="WebConfig:AmazonAccessKey" 
                                SecretKey="WebConfig:AmazonSecretKey"
                                BucketName="tracksupload" />
                        </Adapters>
                    </fjx:FileUploader>

        </form></div>
  

Хорошо, итак, я попытался немного изменить свой подход по сравнению с описанным выше вчера. Вместо того, чтобы пытаться запустить действие TracksController, я хочу переместить этот код действия в событие Confirm_Upload. Но теперь мне все еще нужно получить значения текстовых полей. Поскольку MVC не запоминает состояние, это оказывается затруднительным. Вот текстовые поля. они находятся на той же странице, что и приведенный выше код.

  <label for="BandName">Artist</label> 
       <%=Html.TextBox("Artists") %><%:Html.ValidationMessage("Artist","*")%>
        <div class="clearfix">
        </div>
        <label for="SongName">Song Title
        </label>
          <%=Html.TextBox("SongName") %><%:Html.ValidationMessage("SongName","*")%>
        <div class="clearfix">
        </div>
  

Возможно ли извлечь значения текстового поля и отправить их в событие Confirm_Upload, которое происходит на стороне сервера? Если не с помощью серверного кода, то, возможно, на стороне клиента JavaScript?

Используемый мной элемент управления загрузкой — единственный, который полностью выполняет то, что я хочу, но это веб-формы, сайт выполнен на MVC. Итак, у меня есть элемент управления web forms на странице mvc. Я хочу использовать значения текстового поля MVC и передать их элементу управления web forms для обработки.

Ответ №1:

Url.Action просто возвращает URI. Вы пытаетесь перенаправить?

Иногда события WebForms работают в MVC, поэтому я проверял, так ли это просто, как вам нужно перенаправить.


Ваша основная проблема заключается в том, что вы пытаетесь использовать код WebForms в том, что выглядит как страница MVC. В большинстве случаев это несовместимо, и вам нужно будет подключить javascript самостоятельно или использовать другой из многих элементов управления загрузкой файлов javascript непосредственно в вашем представлении.

Я ничего не могу порекомендовать, потому что я не знаком с загрузкой S3. Возможно, другой пользователь SO сможет ответить лучше.

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

1. Изначально у меня была кнопка отправки для выполнения загрузки в коде, подобном этому <div class=»submitBtnDiv»><тип ввода= «submit» значение=»Submit» class=»submitBtn» id = «trackAdd» /></div>. но теперь загрузка асинхронна, поэтому я хочу выполнить ту же обратную передачу

2. большое спасибо, jfar, если бы у меня еще было 15 очков репутации, я бы проголосовал за это, так как это было полезно,