如何使用错误函数有效调试mvc ajax调用?

问题描述:

我对MVC相当陌生,我有一个函数可以覆盖提交按钮上的默认事件,我会根据提交表单更新部分视图。它工作得很好。然后它停止工作。我唯一改变的是我为datepicker(IE 9)添加了一些webshim的东西。我试着评论这一点,没有任何评论。我在ajax调用中放置了一个错误函数,果然,由于某种原因,调用失败。下面是我的Ajax调用:如何使用错误函数有效调试mvc ajax调用?

<script> 
    $(document).ready(function() { 
     $("#DropDownForm").on("submit", function (event) { 
      //Prevent default action on the drop down submit form 
      event.preventDefault(); 
      var form = $(this); 
      var Project = $('#ProjectDropDown').val(); 
      var Release = $('#ReleaseDropDown').val(); 
      //Instead run this function - find Release and update table 
      $.ajax({ 
       url: form.attr("action"), 
       //async: false, 
       method: form.attr("method"), 
       data: form.serialize(), 
       error: function (exception) { alert(exception + "\n" + form.serialize() + "\n" + form.attr("action") + "\n" + form.attr("method")) } 
      }) 
      .done(function (result) { 
       $("#ReleaseTableBodyForm").empty(); 
       $("#ReleaseTableBodyForm").html(result + 
        '<br/><div><button style=\"text-align:center\">Submit</button></div>'); 
      }); 
     }); 
    }); 
</script> 

的形式被引用:

@using (Html.BeginForm("LoadRelease", "Home", FormMethod.Post, new { id = "DropDownForm", style = "" })) 
{ 
    @*Dropdowns*@ 
    <select id="BusinessAreaDropDown" name="BusinessArea" onchange="javascript: FillGenericProject(); FillProject(); FillReleases();" style="width: 11em;"> 
     @Html.Partial(@"Dropdowns\_BusinessArea", Model.ProjectViewModels); 
    </select> 
    <select id="GenericProjectDropDown" name="GenericProject" onchange="javascript: FillProject(); FillReleases();" style="width: 11em;"></select> 
    <select id="ProjectDropDown" name="Project" style="width: 18em;" onchange="javascript: FillReleases();"></select> 
    <select id="ReleaseDropDown" name="Release" style="width: 11em;"></select> 
    <button type="submit" id="GoButton" style="visibility:hidden;">Go</button> 
} 

而且它在叫得很开心,直到最近控制器(在HomeController.cs)

[HttpPost] 
    public ActionResult LoadRelease(string Project, string Release) 
    { 
     var ProjectID = _ProblemReportsDB.ProjectMaps 
      .Where(r => r.Project == Project) 
      .Select(r => r.ID).FirstOrDefault(); 

     ViewBag.Project = Project; 

     var Releases = from row in _ProblemReportsDB.PlannedOpenCloses 
         where (row.Project == ProjectID && (Release == null || row.Release == Release)) 
         select row; 

     return PartialView("_TableBody", Releases.ToList()); 
    } 

我只是不知道如何调试ajax调用。

错误调用输出这样的:

[object Object] 
BusinessArea=Test1&GenericProject=Test2&Project=Test3&Release=Create+New+Release 
/Home/LoadRelease 
post 

所有这一切是正确的。只是简单地失败。有什么方法可以从ajax错误参数中获取更多信息吗? [对象对象]对我来说是无用的。

+0

不确定,但你是否也改变了返回类型?如果我没有错,它应该返回Json(Releases.ToList()); – LiranBo

+0

@LiranBo返回类型也可以是html,我可以指定html作为数据类型,但仍然失败。它甚至不试图运行C#函数。 – Aserian

Is there some way I can get more information from the ajax error parameters? [object Object] is kind of useless to me.

按照该文档$.ajax

error Type: Function(jqXHR jqXHR, String textStatus, String errorThrown)

Function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are "timeout", "error", "abort", and "parsererror".

When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as "Not Found" or "Internal Server Error." As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and cross-domain JSONP requests. This is an Ajax Event.

所以[对象]你得到的是jpXHR这是底层XMLHttpRequest jquery的包装。如果你想要状态文字和错误信息,然后将其他参数添加到您的错误回调:

error: function (xhr, textStatus, errorThrown) { 
     console.error(textStatus + "\n" + errorThrown); 
} 

Javascript是不喜欢在这方面C#。所有参数基本上都是可选的,您也可以传递比函数签名所需的更多参数。

+0

华友世纪,错误是“错误:内部服务器错误”:(回到调试...你确实回答了这个问题,虽然哈哈谢谢 – Aserian