我有一个MVC应用程序。在一页上,我有一个局部视图,显示一个引导表。我有一些双击表行时触发的javascript代码。此代码从双击的行中检索一些值,并构造一个URL,然后导航到该URL。
这可以正常工作,但是我创建url的方式意味着我在url中有显示为查询字符串的数据。不使用查询字符串如何实现导航。哦,如果可能的话,我需要导航到新的窗口/选项卡。
我的双击javascript代码是:
$mTable.on('dbl-click-row.bs.table', function (e, row, $element) {
var cod = $('#hdCOD').val();
var mv = mGetSelectedRow().CMonth;
var yv = mGetSelectedRow().CYear;
var diff_cv = moment.utc(cod).diff(moment.utc(yv + '-' + pad(mv, 2) + '-' + '24'), 'months', true);
var plcf = '';
switch(true) {
case (diff_cv >= 2):
plcf = 'past';
break;
case (diff_cv >= 1 && diff_cv < 2):
plcf = 'last';
break;
case (diff_cv >= 0 && diff_cv < 1):
plcf = 'current';
break;
case (diff_cv < 0):
plcf = 'future';
}
var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod;
window.open(url, '_blank');
})
使用razor语法调用部分视图:
Html.RenderAction("GetSummaryForAdmin", New With {Key .pn = Model.PersonelNo})
我似乎无法在javaScript中找到一个等效的函数来模仿New With {Key .pn = Model.PersonelNo}
我,我也不确定这是否是这样做的方法。我已经考虑过ajax调用,但是我认为我不能将其作为新窗口/选项卡打开。
任何帮助表示赞赏。
更新
我发现以下ajax.post方法为我提供了我想要的文档...在开发人员工具(Chrome / IE中为F12)中,使用网络标签可以看到该文档的调用,如果预览该文档,它会显示数据。但是该页面未显示在浏览器中。
在新窗口/选项卡中打开不是必需的,但是很高兴。
我的新代码取代了...
//var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod;
//window.open(url, '_blank');
和...
$.ajax({
type : "post",
url : "ClaimMonth/ViewMonth",
data : {pn: mGetSelectedRow().Cpid, cm: mv, cy: yv, mt: plcf, cod: cod },
success : function(response) {
window.open();
},
error : function(xhr) {
console.log("error"+xhr.status);
},
complete : function() {
}
});
我将控制器功能更改为接受参数,而不是读取request.querystring
您将不得不结合使用postback和Session。
AJAX Post(如您所愿)将值发送回服务器。
在处理该回发的MVC操作方法中,将值保存到Session中:
Public Function ViewMonth(...) As JsonResult
Session("SavedMonth") = New MonthObj(pn, cm, cy, mt, cod)
Return Json(True)
End Function
当AJAX发布成功返回时,请使用其他URL打开一个新窗口:
success : function(response) {
window.open('/ClaimMonth/AfterSave');
},
该URL的MVC操作方法从会话中加载保存的数据,然后显示它。
Public Function AfterSave() As ViewResult
Dim model As MonthObj = TryCast(Session("SavedMonth"), ModelObj)
Return View(model)
End Function
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句