#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 очков репутации, я бы проголосовал за это, так как это было полезно,