2014-01-28 89 views
1

我試圖讓我的成功結果通過Ajax查詢覈實。阿賈克斯成功的功能沒有被解僱MVC

Ajax查詢取值爲model作爲參數並據此過濾結果。

這裏是我的ajax查詢和瀏覽頁面級

@model IEnumerable<FunRanger.Models.TagModel> 
@foreach (var item in Model) { 
    <script type="text/javascript"> 
     $(function() { 
      $('#' + '@item.tagId').click(function() { 
       $.ajax({ 
        url: '/Tag/TagFilter/?tagName=' + '@item.tagName', 
        type: 'post', 
        success: function (data) { 
         $('#funhome-partial').html(data); 
        } 
       }); 
      }); 

     }); 
    </script> 
    <div class="tags"> 
     <a href="#" id="@item.tagId">#@item.tagName</a> 
    </div> 

} 

我想在其他的div id爲「funhome-partial`過濾這個結果。這個div是其他Project文件我的項目

行動爲

[HttpPost] 
public ActionResult TagFilter(TagModel tag) { 
    var cardlist = (from u in db.CardTables 
        where u.CardHashCode.Contains(tag.tagName) 
        select new CardModel { 
         cardHashCode = tag.tagName, 
         cardDate = u.CardDate, 
         cardFileName = u.CardFileName, 
         cardFilePath = u.CardFilePath, 
         cardID = u.CardID, 
         cardTitle = u.CardTitle 
        }).ToList(); 
    return View("FunHome", cardlist); 

} 

,一切工作正常。我根據那個參數得到過濾的記錄,我可以通過在那裏放置斷點來檢查。

但此查詢不叫AJAX的success功能,並顯示了我這個錯誤 -

在一個名爲RipEnglish參數的情況下。

Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost:61203/Tag/TagFilter/?tagName=RipEnglish 

如何獲得ajax成功調用的結果,也是這樣做的好方法嗎?

+0

http500是一個錯誤。你不會取得成功的結果,因爲它沒有成功。 – Jamiec

+0

不知道這是否導致問題,但不應該你的queryString是'?tag ='not'?tagName =' – talegna

+0

@Jamiec,你是對的它不會成功。但我無法追蹤錯誤。操作是否檢索過濾結果。 – user3163213

回答

0

我管理這個問題的工作。

跟蹤@ gooberverse的答案非常簡單。

我檢查了開發者工具>網絡>響應,它說我no view engine supports the searched locations or not found in searched locations錯誤。

儘管我必須創建一個共享視圖 - >shared>_SharedView,並且必須使用相同的方法來呈現它。

而且它的魅力。

+0

將其標記爲已回答 –

3

如果您對AJAX沒有太多的經驗,AJAX可能很難排除故障。適用於所有現代瀏覽器的開發工具(或FireBug)都是您的朋友。它們使得查看/理解服務器返回的響應變得更加容易。

由於請求使用的是Ajax,因此瀏覽器不會呈現任何返回的錯誤頁面。

使用Chrome(其它工具都差不多,通常用CTRL + SHIFT + I或F12打開):

  1. 打開了開發工具窗格與(CTRL + SHIFT + I)。
  2. 點擊網絡標籤。
  3. 點擊你的頁面元素火單擊處理和發送Ajax請求。
  4. 查找和點擊網絡請求在網絡選項卡(左下角)。
  5. 該窗格旁邊的網絡請求具有標籤爲「接頭」,「預覽」和「響應」。

標題將向您顯示請求的內容(發送到服務器的內容)。

響應將顯示服務器響應的內容。這可能是成功請求的JSON,或者如果發生錯誤,它可能是錯誤頁面的HTML源代碼。

預覽選項卡將呈現服務器響應(如果可能)。如果您收到來自服務器的錯誤響應/頁面,這非常有用,因爲您不必通過原始HTML瀏覽來查找錯誤詳細信息。

如果您的AJAX調用失敗,並且您的服務器返回500錯誤,則可以隨時檢查服務器日誌或查看網絡>預覽選項卡以查看返回的錯誤詳細信息。您可以像對待任何傳統服務器響應一樣對錯誤進行疑難解答。

0

我重建了你的場景,然後解決方案就這樣了,你需要檢查一下你的jquery點擊函數。

樣品模型,我用 -

public class Tag 
{ 
    public string TagName { get; set; } 
} 

控制器動作 -

public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult SubmitTag(Tag t) 
    { 
     return new ContentResult() { Content = t.TagName + "1" }; 
    } 

索引視圖使用jQuery -

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script> 
    $(function() { 
     $("#ClickMe").click(function() { 

      var tag = { 
       "TagName": "SampleTag" 
      }; 

      $.ajax({ 
       url: "@Url.Action("SubmitTag")", 
       type: "POST", 
       data: JSON.stringify(tag), 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        $('#funhome').html(data); 
       }, 
       error: function (response) { 
        alert(response.responseText + "e"); 
       } 
      }); 
     }); 
    }); 
</script> 

<input type="button" id="ClickMe" value="ClickMe" /> 
<div id="funhome"></div> 

最後輸出 -

enter image description here

在調試 -

enter image description here