C# 阿贾克斯没有';不要打控制器

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

在这里,我试图在点击id=“abc”按钮时添加新的注释。单击按钮时,必须调用ajax,并从中调用TaskAssignedDailyLogController的创建操作。换句话说,ajax没有命中TaskAssignedDailyLogsController的创建操作
现在,问题是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;
    }
}