javascript - 如何在 MVC C# 项目中使用单独的 Javascript 文件在 Ajax 调用中正确使用 url
问题描述
在我的项目中,我有一个按钮可以保存 html 页面的更改内容。
该按钮如下所示:
<button class="btn btn-light" title="Export (Ctrl + E)" id="save-btn" data-hmi-action="saveAjax" data-hmi-shortcut="ctrl+e">
<i class="la la-save"></i>
</button>
外部文件中的 saveAjax 分为几个部分。
saveAjax: function(fileName, startTemplateUrl, callback)
{
var data = {};
data["fileName"] = (fileName && fileName != "") ? fileName : HMI.FileManager.getCurrentUrl();
data["startTemplateUrl"] = startTemplateUrl;
if (!startTemplateUrl || startTemplateUrl == null)
{
data["html"] = this.getHtml();
}
console.log(data);
$.ajax({
type: "POST",
url: 'Home/Save', //set your server side save script url
data: data,
cache: false,
success: function (data) {
if (callback) callback(data);
},
error: function (data) {
alert(data.responseText);
}
});
}
上面的 url 是我的控制器操作。执行时,它会在控制台中的 url 上给出错误 500。我在控制器中设置了一个中断,正如预期的那样,它绕过了它。
第二部分如下:
saveAjax : function () {
var url = Hmi.FileManager.getCurrentUrl();
return Hmi.Builder.saveAjax(url, null, function (data) {
$('#message-modal').modal().find(".modal-body").html("File saved at: " + data);
});
}
我已经尝试在按钮的剃须刀页面上使用 url,但是由于这已经调用了 saveAjax 页面并且它不是基于 Id 的调用,所以这将不起作用。控制台中的 url 是正确的 url,这意味着它会到达正确的位置。我认为它正在寻找一个名为 Save 的页面,而不是转到 ActionResult。在这种情况下,我不需要对此进行查看。
我想看看我是否正确地寻找页面而不是 ActionResult,如果是的话,有没有办法让我查看 ActionResult 而不是页面。
也许是一种将某些东西传递给获取 url 的 javascript 文件然后在 saveAjax 脚本中使用它的方法。
下面要添加的是用于项目中所有按钮的 data-hmi-action。
init: function() {
$("[data-hmi-action]").each(function () {
on = "click";
if (this.dataset.hmiOn) on = this.dataset.hmiOn;
$(this).on(on, HMI.Gui[this.dataset.hmiAction]);
if (this.dataset.hmiShortcut)
{
$(document).bind('keydown', this.dataset.hmiShortcut, HMI.Gui[this.dataset.hmiAction]);
$(window.FrameDocument, window.FrameWindow).bind('keydown', this.dataset.hmiShortcut, HMI.Gui[this.dataset.hmiAction]);
}
});
}
谢谢你的帮助!
编辑 - -
在这种特殊情况下,我遇到了 500 服务器错误,因为我试图捕获页面上的 HTML / Javascript。Dot Net 扫描该信息以查找虚构字符。代码标记看起来好像有人传递了信息以及您试图发送的威胁信息。
它可以被禁用。就我而言,它正在添加
[ValidateInput(false)]
到控制器动作。您还可以通过在 web.config 文件中使用来覆盖整个应用程序。
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
在不同的应用程序中还有其他方法可以做到这一点,此示例仅适用于 MVC。您可以查看下面的地址以获取有关其他应用程序的更多详细信息。
解决方案
推荐阅读
- javascript - useEffect 和 useCallback 导致多次重新渲染
- android - 我可以为 Android Mobile 和 Android TV 应用程序使用相同的包名称来播放商店吗?
- spring-boot - 我可以在我的 Spring Boot 应用程序中使用来自谷歌的 id_token 吗?
- swiftui - 为什么侧边栏菜单不能与 tabview 一起正常工作?
- java - 如何使用带有@Query的spring-data-couchbase从文档中返回布尔值
- python - 我有如下所示的 .txt 文件我想获取从关键字“Min”到最后一个“。”的所有字符串
- java - 使用 ArrayList 时的合并排序问题
- sql - 让sql查询失败的优雅方法?
- c++ - 为什么 std::string 变量在 C++ 中一次只接受 1 个字符?
- laravel - laravel,如何将图像保存到 public_html 目录