防止actionlink更改当前视图

时间:2018-05-21 14:37:10

标签: javascript angularjs asp.net-mvc view actionlink

我有一个触发视图控制器中的函数的actionlink,该函数将文件从一个文件夹移动到“archive”文件夹,因此它不会返回任何内容。但是,当单击该按钮时,该函数将触发并移动正确的文件,但视图将更改为“/ functionName + variables”,我需要页面保持不变并且仅运行该函数。理想情况下,不要让页面刷新/重定向回自身。

按钮处于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>

我构建了actionlink网址,然后使用data-ng-href

将它们应用到每个按钮

该函数是一个void,因为它不会返回任何与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 =”something“”,然后将以下内容添加到页面底部(以下内容来自此处的其他类似问题)

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

            });

        });
    </script>

但这导致什么都没发生

编辑:我还尝试了标签上的js / ajax id和内部相同的结果。

1 个答案:

答案 0 :(得分:1)

当我使用Angular时,我改变了它,所以我在js中调用了c#controller函数。

HTML:

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

我使用ng-click调用.js控制器中的角度

JS:

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

这里我给出一个范围名称,它是ng-click引用的名称,并传递c#函数需要的参数。这会触发该功能,并且不会尝试更改视图。