问题描述
从控制器返回后是否可以使用preventDefault()?
我想执行以下操作,当调用@ Html.ActionLink时,它将验证控制器,并根据验证,它调用视图,或者如果失败,则返回带有链接的json从另一个动作中提取,然后我以ajax处理该动作,并以模态形式显示结果。
我以前使用@ Ajax.Options,但遇到以下问题,它将始终返回视图值而不是视图,我将不得不使用UpdateTargetId在某些div中更新视图。但是我想转到下一页,但是后来我认为我可以使用window.location.href = ref;。叫我动作本身,但是这样,我将两次调用该动作(第一次在@ajax调用中,第二次在window.location中)
实际代码示例:
查看索引: 使用GridViewPartial进行索引,调用操作详细信息
@Html.ActionLink("\xA0","Details",new { id = c.keyvalue },new { @class = "Lato-Bold buttoninfo test2" }).ToHtmlString(),
控制器详细信息:
public ActionResult Details(int? id)
bool erro = false;
if (erro)
{
var redirectUrl = new UrlHelper(Request.RequestContext).Action("ForbiddenAccesspop","_Login");
return Json(new { modal = "true",Url = redirectUrl},JsonRequestBehavior.AllowGet);
}
else
{
return View(item);
}
JAVASCRIPT:
$(function () {
$(document).on('click','.test2',function (e) {
$.ajax({
type: 'POST',url: this.href,success: function (data) {
//e.preventDefault(); EXAMPLE HERE,BUT NOT WORKING...
if (data.modal === "true") {
$.ajax({
url: data.Url,success: function (result) {
$("#ModalContent").html(result);
$('#ModalShow').modal('show');
}
});
}
else {
//window.location.href = ref;
}
}
});
});})
旧方法是这样的:
控制器:
public ActionResult Details(int? id)
try {
return PartialView(item);
}
catch {
return RedirectToAction("ForbiddenAccesspop","_Login",new { ActualController = actualController,ActualAction = actualAction });
}
==================
查看_Layout:
<div id="main">
@RenderBody()
</div>
==================
带有GridviewPartial的索引:
@Ajax.ActionLink("\xA0",new AjaxOptions { HttpMethod = "POST",OnSuccess = "OnSuccessModal(data,this)",OnFailure="OnFailureModal(data,UpdateTargetId = "main"},new { @class = "Lato-Bold buttoninfo ajaxhistory" }).ToHtmlString(),
==================
JavaScript:
function OnFailureModal(result,ref) {
$.ajax({
url: result.Url,success: function (data) {
$("#ModalContent").html(data);
$('#ModalShow').modal('show');
}
});
}
function OnSuccessModal(result,ref) {
window.history.pushState("stateObj","new page",ref);
}
$(document).ready(function () {
$(".ajaxhistory).click(function() {
var href = $(this).attr("href");
if (href.indexOf("javascript") >= 0)
return;
history.pushState(null,$(this).html,href);
});
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)