在.Net MVC开发时,前端页面要访问时我们一般都会使用@Url.Action("")来获取请求地址,不使用直接输入地址,因为MVC时路由来控制请求访问的,你直接输入地址可能会根据环境的改变而不一致。
如果直接在View上,我们在js脚本中写入如下请求地址程序是能解析对应Control中的Action的
var url = "@Url.Action("Add")";
但是有时候,我们前段脚本比较多可能会用单独建立个js库的形式,比如test.js里面就按此页面的一些ajax调用后台的方法如add(),
此时,我们在里面使用刚才的代码去获取后端服务器的url是获取不到的,如果我们直接写入地址可能当时可以,发布环境有变化就不行了。其实可以在前段比如新增按钮上增加一自定义属性如:
<a href=" javascript:;" id="btn_add" class="weui-btn weui-btn_mini weui-btn_primary" data-request-url="@Url.Action("AddTime", "SfdTime")/">新增</a>
此代码中我们加入了自定义属性data-request-url,将此值设置为@Url.Action("AddTime", "SfdTime"),因为此代码是在View中的,使用能够解析刚才的Action
然后对此新增按钮btn_add设置下事件
$("#btn_add").click(function () {
AddTime($(this).data("request-url"));
});
这样当执行此按钮的Click事件时会将data-request-url属性传入AddTime方法中,此时你的方法可以单独放在js库中,通过获取此url来做相应的请求
function AddTime(url) {
$.post(url,
{ "doc_id": $("#doc_id").val(), "datea": $("#datea").val(), "amat": $("#stime").val(), "ambt": $("#etime").val() },
function (result) {
if (result == "ok") {
$('#dg').datagrid("reload");
}
else {
Msg("提示", result);
}
})
}
这样就可以做到js库中也可以执行相应的请求了