2015-10-20 38 views
0

我對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

回答

1

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