Запретить actionlink от изменения текущего представления - PullRequest
0 голосов
/ 21 мая 2018

У меня есть actionlink, который запускает функцию в контроллере представления, функция перемещает файл из одной папки в папку «архив», поэтому ничего не возвращает.Однако, когда кнопка нажата, функция запускается, и правильный файл перемещается, но представление меняется на "/ functionName + variable", мне нужно, чтобы страница оставалась прежней и только для запуска функции.В идеале не нужно обходиться без обновления / перенаправления страницы обратно на себя.

Кнопка находится в режиме ng-repeat, поскольку файлы могут изменяться, есть также кнопка для загрузки файла, который запускается, и файл загружается, никаких изменений вида и т. Д. Не происходит.

<div ng-repeat="file in toFileList">
    @{
        var toURL = Url.Action("DownloadFile", "Home", new { ToFrom = "to", FileName = "{{toFileList[$index][0]}}"});
        toURL = HttpUtility.UrlDecode(toURL);
    }
    @{
        var toArchiveURL = Url.Action("ArchiveFile", "Home", new { ToFrom = "to", FileName = "{{toFileList[$index][0]}}" });
        toArchiveURL = HttpUtility.UrlDecode(toArchiveURL);
    }

    <a style="text-decoration: none;" data-ng-href="@toURL">
        <span class="glyphicon glyphicon-download-alt"></span>
    </a>
    <a style="text-decoration: none;" data-ng-href="@toArchiveURL">
        <span class="glyphicon glyphicon-eye-open"></span>
    </a>
</div>

Я создаю URL-адреса actionlink, затем применяю их к каждой кнопке, используя data-ng-href

Эта функция пуста, поскольку она не возвращает ничего, в отличие от функции загрузки файла, котораяимеет тип ActionResult.

public void ArchiveFile(string ToFrom, string FileName)
        {
            string path = BaseFolder + client + @"\" + ToFrom + @"\" + FileName;
            string destinationPath = BaseFolder + client + @"\" + ToFrom + @"\Archive\" + FileName;

            byte[] fileBytes = System.IO.File.ReadAllBytes(path);

            System.IO.File.Move(path, destinationPath);
        }

Я попытался добавить "id =" что-то "к {}, содержащему переменные действия, а затем добавить следующее в нижней части страницы (ниже приведен другой подобный вопрос здесь)

<script>
        $("#something").click(function (e) {
            e.preventDefault();
            $.ajax({
                url: $(this).attr("href"),
                success: function () {
                    alert("clicked"); 
                }

            });

        });
    </script>

Но это приводит к тому, что ничего не происходит

РЕДАКТИРОВАТЬ: Я также пробовал идентификатор js / ajax для тега и внутри с теми же результатами.

1 Ответ

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

Поскольку я использую Angular, я изменил его, поэтому вместо этого вызываю функцию контроллера c # в js.

HTML:

<div style="float:left" ng-click="archiveFile(toFileList[$index][0])">
   <span class="glyphicon glyphicon-eye-open"></span>
</div>

Я использую ng-click для вызова angularв контроллере .js

JS:

$scope.archiveFile = function (fileName) {    
  $http.get("/Home/ArchiveFile", { params: { ToFrom: "To", FileName: fileName } }).then(function (result) {
      console.log(result)
  });
};

Здесь я даю имя области действия, на которое ссылается ng-click, и передаю параметры, необходимые функции c #.Это вызывает функцию и не пытается изменить представление.

...