Я хочу отправить текстовый файл в действие и получить количество текстовых слов без отправки формы.
мои коды в действии работают хорошо (это действие получает HttpPostedFileBase и использует счетчик возврата потокового чтения), поэтому проблема в представлении.
это мой код в представлении для отправки файла для просмотра и получения результата:
<script>
$("#MyForm").submit(function (event) {
event.preventDefault();
var files = $('#fileInput').files[0]);
$.ajax({
type: "Post",
url: "/Counter/GetCount",
enctype: "multipart/form-data",
data: files
}).done(function (result) {
$("#result").html(result);
});
</script>
если вы можете, исправьте мой код или дайте мне новый код, я хочу увидеть ваши предложения для этого.
Код Редактировать из комментария:
[HttpPost]
public ActionResult GetCount(HttpPostedFileBase file)
{
using (StreamReader reader = new StreamReader(file.FileName))
{
string result = reader.ReadToEnd();
return PartialView(result.Count());
}
}
нам также нужно видеть действие в бэкэнде
Результат @freedomn-m - количество текста... и это только для тренировки
@JonathanAlfaro ` [HttpPost] public ActionResult GetCount (файл HttpPostedFileBase) { использование (читатель StreamReader = новый StreamReader (имя файла)) { string result = reader.ReadToEnd(); вернуть PartialView(result.Count()); } }`
Действие должно получить IFormFile
@JonathanAlfaro находится в пространстве имен Microsoft.AspNetCore.Http, но мой проект находится в Asp .Net Mvc?
это либо ядро .net, либо нет..... и IFormFile - правильный тип для получения при загрузке файлов
Вы можете попробовать заменить код запроса ajax на:
$.ajax({
url: "/Counter/GetCount",
data:files,
type:'POST',
contentType: false,
processData: false,
success: function(result){
$("#result").html(result);
}
});
Вы можете попробовать использовать FormData для передачи файлов в действие с помощью ajax. Вот рабочая демонстрация:
Посмотреть:
<form id = "MyForm" method = "post">
<input id = "fileInput" type = "file" />
<input type = "submit" value = "submit"/>
</form>
<script>
$("#MyForm").submit(function (event) {
event.preventDefault();
var formData = new FormData();
formData.append('file', $('#fileInput').get(0).files[0]);
$.ajax({
type: "Post",
url: "/Counter/GetCount",
data: formData,
processData: false,
contentType: false,
}).done(function (result) {
$("#result").html(result);
});
})
</script>
Действие:
[HttpPost]
public ActionResult GetCount(IFormFile file)
{
using (StreamReader reader = new StreamReader(file.FileName))
{
string result = reader.ReadToEnd();
return PartialView(result.Count());
}
}
Если ваша проблема в представлении, показ нам jquery не поможет. Что такое
result
в вашей.done
функции. Он попадает в .done или вы получаете сообщение об ошибке (всегда добавляйте вызов.fail
). Если вы просто считаете слова, почему бы не сделать это в js? (или это просто доказательство концепции)?