我有一个触发视图控制器中的函数的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和内部相同的结果。
答案 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#函数需要的参数。这会触发该功能,并且不会尝试更改视图。