Отправить значение angularJS в действие MVC - PullRequest
0 голосов
/ 11 мая 2018

У меня есть функция в контроллере MVC, которая загружает файл, мне нужно это сделать, когда ему передано имя файла. Эта функция работает, но имя файла является значением AgularJS.

Метод MVC:

 public ActionResult DownloadFile()
 {
    string fileName = "test.txt";
    string path = AppDomain.CurrentDomain.BaseDirectory + "/UploadedFiles/";
    byte[] fileBytes = System.IO.File.ReadAllBytes(path + fileName);            
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
 }

Это работает при вызове с использованием:

@Html.ActionLink("Click here to download", "DownloadFile", new { })

Мне нужно передать строку в метод, однако, чтобы использовать в качестве "fileName".

Обновлен метод для получения файла fileName:

 public ActionResult DownloadFile(string fileName)
 {
   string path = AppDomain.CurrentDomain.BaseDirectory + "/UploadedFiles/";
   byte[] fileBytes = System.IO.File.ReadAllBytes(path + fileName);
   return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
 }

Способы, с помощью которых я пытался вызвать эти методы при передаче агулярного значения, таковы:

1)

@Html.ActionLink("Download File", "DownloadFile", new { id = "{{file}}" })

Этот способ вызывает исключение в методе, так как «fileName» имеет значение null, поэтому путь к файлу не разрешается для загрузки.

2) * * тысяча двадцать один

 @Html.ActionLink("Download File", "DownloadFile", "Home", new { id = "{{file}}" })

Практически то же самое, что и первый, но с указанием имени контроллера, дает тот же результат, что и первый.

3)

@{
   var url = Url.Action( "DownloadFile2", "Home", new { id = "{{file}}" });
   url = HttpUtility.UrlDecode(url);
 }
<a data-ng-href="@url">Download File</a>

В результате браузер переходит на страницу с URL-адресом: http://localhost/Home/DownloadFile/test.txt с ошибкой страницы: ошибка HTTP 404.0 - не найдена

Представление может видеть значение и выводить его на страницу в виде обычного текста, но я не могу понять, как отправить значение в метод.

1 Ответ

0 голосов
/ 11 мая 2018

Поскольку у вас есть следующая подпись для вашего действия:

public ActionResult DownloadFile(string fileName)

Вы всегда должны отправлять параметр с именем fileName независимо от того, используете ли вы Url.Action или ActionLink.

@Html.ActionLink("Download File", "DownloadFile", "Home", new { fileName = "{{file}}" })

var url = Url.Action( "DownloadFile2", "Home", new { fileName = "{{file}}" });

id используется в качестве общего параметра, только когда вы определяете поддерживаемые маршруты:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    // Parameter defaults
);

Там вы можете контролировать, может ли id быть необязательным или нет, и многое другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...