C# 阿贾克斯没有';不要打控制器
在这里,我试图在点击id=“abc”按钮时添加新的注释。单击按钮时,必须调用ajax,并从中调用TaskAssignedDailyLogController的创建操作。换句话说,ajax没有命中TaskAssignedDailyLogsController的创建操作C# 阿贾克斯没有';不要打控制器,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,在这里,我试图在点击id=“abc”按钮时添加新的注释。单击按钮时,必须调用ajax,并从中调用TaskAssignedDailyLogController的创建操作。换句话说,ajax没有命中TaskAssignedDailyLogsController的创建操作 现在,问题是ajax没有调用创建操作 下面是Ajax <script> $(document).ready(function () { $(document).on('click', '#abc', f
现在,问题是ajax没有调用创建操作
下面是Ajax
<script>
$(document).ready(function () {
$(document).on('click', '#abc', function () {
debugger
var you = $("#myForm1").serialize();
var parameter = { taskAssignedDailyLog: you };
$.ajax({
url: '@Url.Action("Create", "TaskAssignedDailyLogs")',
type: "post",
dataType: "html",
data: parameter,
success: function (data) {
alert(data);
$(".newCommentList").empty();
$(".newCommentList").html(data);
}
});
});
});
</script>
我曾经在这里看到过这个问题的一个可能的解决方案。我不记得是谁写的这段代码,但它的工作原理与预期一致:
/***********************************************
* AuthorizeAttribute filter for JsonResult methods
*
* Validates AntiForgeryToken from header of AJAX request.
* AntiForgeryToken must be placed into that header.
************************************************/
/*
View
@Html.AntiForgeryToken()
<script>
var headers = {};
headers["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
$.ajax({
type: "POST", //Type must be POST
url: url,
dataType: "json",
headers: headers,
Controller
[ValidateJsonAntiForgeryToken]
public JsonResult Method() { }
*/
public sealed class ValidateJsonAntiForgeryToken : AuthorizeAttribute
{
public JsonResult deniedResult = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { StatusCode = HttpStatusCode.Forbidden, Error = "Access Denied" }
};
public override void OnAuthorization(AuthorizationContext filterContext)
{
System.Diagnostics.Debug.WriteLine("ValidateJsonAntiForgeryToken");
var request = filterContext.HttpContext.Request;
if (request.HttpMethod == WebRequestMethods.Http.Post && request.IsAjaxRequest() && request.Headers["__RequestVerificationToken"] != null)
{
AntiForgery.Validate(CookieValue(request), request.Headers["__RequestVerificationToken"]);
}
else
{
filterContext.Result = deniedResult;
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
System.Diagnostics.Debug.WriteLine("ValidateJsonAntiForgeryToken HandleUnauthorizedRequest ");
filterContext.Result = deniedResult;
}
private static string CookieValue(HttpRequestBase request)
{
var cookie = request.Cookies[AntiForgeryConfig.CookieName];
return cookie != null ? cookie.Value : null;
}
}
/***********************************************
*JsonResult方法的AuthorizeAttribute筛选器
*
*从AJAX请求的标头验证AntiForgeryToken。
*AntiForgeryToken必须放在该标头中。
************************************************/
/*
看法
@Html.AntiForgeryToken()
var头={};
headers[“\uuu RequestVerificationToken”]=$(“[name=\uu RequestVerificationToken]”)。val();
$.ajax({
类型:“POST”,//类型必须是POST
url:url,
数据类型:“json”,
标题:标题,
控制器
[ValidateJsonAntiForgeryToken]
公共JsonResult方法(){}
*/
公共密封类ValidateJSonantiForgerToken:AuthorizeAttribute
{
public JsonResult deniedResult=new JsonResult()
{
JsonRequestBehavior=JsonRequestBehavior.AllowGet,
Data=new{StatusCode=HttpStatusCode.Forbidded,Error=“拒绝访问”}
};
授权时的公共覆盖无效(AuthorizationContext filterContext)
{
System.Diagnostics.Debug.WriteLine(“ValidateJsonAntiForgeryToken”);
var request=filterContext.HttpContext.request;
if(request.HttpMethod==WebRequestMethods.Http.Post&&request.IsAjaxRequest()&&request.Headers[“\uu RequestVerificationToken”]!=null)
{
AntiForgery.Validate(CookieValue(请求),request.Headers[“\uu RequestVerificationToken]”);
}
其他的
{
filterContext.Result=deniedResult;
}
}
受保护的覆盖无效HandleUnauthorizedRequest(授权上下文筛选器上下文)
{
System.Diagnostics.Debug.WriteLine(“ValidateSonantiForgeryToken HandleUnauthorizedRequest”);
filterContext.Result=deniedResult;
}
私有静态字符串CookieValue(HttpRequestBase请求)
{
var cookie=request.Cookies[AntiForgeryConfig.CookieName];
返回cookie!=null?cookie。值:null;
}
}
只需使用新属性装饰您的方法:
[ValidateJsonAntiForgeryToken]
还有另一个类似的解决方案
让我知道它是否适用于您。您是否尝试在更改后重建项目?如何定义路由?您应该做的第一件事是检查控制台和网络选项卡中的ajax错误,并在此处报告结果。这将为我们提供一个工作起点。您没有说明问题的性质,只是“不起作用”顺便说一句,你的控制器应该返回一个局部视图,而不是一个整体视图,否则它会在“newCommentList”元素中插入整个页面,包括head标记、css/js引用,从而创建无效标记(由于嵌套的“html”标记等)脚本冲突、意外的布局问题和通常只是一个大问题的潜在错误是的,愚蠢的回答,抱歉,但再看看,我认为问题在于您正在验证防伪令牌,您是否在http调用中传递它?我看不到您这样做
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(TaskAssignedDailyLog taskAssignedDailyLog)
{
if (ModelState.IsValid)
{
taskAssignedDailyLog.PostedBy = 1;
taskAssignedDailyLog.PostedOn = DateTime.Now.Date;
db.TaskAssignedDailyLogs.Add(taskAssignedDailyLog);
db.SaveChanges();
return RedirectToAction("Index", new { ProjectId =1 , TskAssId = taskAssignedDailyLog.TskAssId });
}
return View(taskAssignedDailyLog);
}
/***********************************************
* AuthorizeAttribute filter for JsonResult methods
*
* Validates AntiForgeryToken from header of AJAX request.
* AntiForgeryToken must be placed into that header.
************************************************/
/*
View
@Html.AntiForgeryToken()
<script>
var headers = {};
headers["__RequestVerificationToken"] = $('[name=__RequestVerificationToken]').val();
$.ajax({
type: "POST", //Type must be POST
url: url,
dataType: "json",
headers: headers,
Controller
[ValidateJsonAntiForgeryToken]
public JsonResult Method() { }
*/
public sealed class ValidateJsonAntiForgeryToken : AuthorizeAttribute
{
public JsonResult deniedResult = new JsonResult()
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { StatusCode = HttpStatusCode.Forbidden, Error = "Access Denied" }
};
public override void OnAuthorization(AuthorizationContext filterContext)
{
System.Diagnostics.Debug.WriteLine("ValidateJsonAntiForgeryToken");
var request = filterContext.HttpContext.Request;
if (request.HttpMethod == WebRequestMethods.Http.Post && request.IsAjaxRequest() && request.Headers["__RequestVerificationToken"] != null)
{
AntiForgery.Validate(CookieValue(request), request.Headers["__RequestVerificationToken"]);
}
else
{
filterContext.Result = deniedResult;
}
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
System.Diagnostics.Debug.WriteLine("ValidateJsonAntiForgeryToken HandleUnauthorizedRequest ");
filterContext.Result = deniedResult;
}
private static string CookieValue(HttpRequestBase request)
{
var cookie = request.Cookies[AntiForgeryConfig.CookieName];
return cookie != null ? cookie.Value : null;
}
}