2013-06-04 27 views
1

返回的IList 我有一個Web方法在我的控制器...... 調用的WebMethod從jQuery的Ajax和NHibernate和MVC

[WebMethod] 
    public IList<ThemeSelectList> GetThemesForSelectedCategory(string themeCategoryId) 
    { 
     IList<ThemeSelectList> themeSelectList = new List<ThemeSelectList>(); 
     int emailLayoutThemeCategoryId = Convert.ToInt32(themeCategoryId); 
     using (var trans = session.BeginTransaction()) 
     { 
      EmailThemeBusinessLogic emailThemeBusinessLogic = new EmailThemeBusinessLogic(session, null); 
      themeSelectList = emailThemeBusinessLogic.GetThemes(emailLayoutThemeCategoryId); 
      trans.Commit(); 
     } 

     return themeSelectList;    
    } 

,我想從一個Java腳本函數調用,這是

function GetThemesForSelectedCategory(event) 
{ 
    event = event || window.event || e.srcElement; 
    event.preventDefault(); 
    var selectedThemeCategoryId = $('#ddlThemeCategory option:selected').val(); 
    var ThemeContainerDiv = $("#ThemeContenerDiv"); 
    ThemeContainerDiv.html('<p><img src="../../../../Images/loading.gif"></p>'); 
    $.ajax 
    ({ 
     type: "POST", 
     url: "GetThemesForSelectedCategory", 
     data: JSON.stringify({ "themeCategoryId": selectedThemeCategoryId }), 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (data) { 
      // function is not returning to success 
      var ThemeDetails = data.d; 
      for (var i = 1; i <= ThemeDetails.length; i++) { 
       var row = ['<div id="' + ThemeDetails[i].ThemeId + '" class="themegroup divhighlight">\ 
           <div class="themename">\ 
            ' + ThemeDetails[i].ThemeName + '\ 
           </div>\ 
           ' + GetColourTamplate(ThemeDetails[i].ThemeTemplateColorList) + ''].join('\n'); 
      } 
     }, 
     error: function (xhr, ajaxOptions, thrownError) { 
      // always error method is getting called 
      var somthing = "pankajDubey"; 
     }, 
     complete: function (data) 
     { 
      var ThemeDetails = data.d; 
      for (var i = 1; i <= ThemeDetails.length; i++) { 
       var row = ['<div id="' + ThemeDetails[i].ThemeId + '" class="themegroup divhighlight">\ 
           <div class="themename">\ 
            ' + ThemeDetails[i].ThemeName + '\ 
           </div>\ 
           ' + GetColourTamplate(ThemeDetails[i].ThemeTemplateColorList) + ''].join('\n'); 
      } 
     } 
    }); 
} 

我無法理解發生了什麼問題。 網絡方法中的每件事情都很好,但我不知道缺少什麼。 請幫助,因爲我是新來的MVC和NHibernate都...

+0

什麼是錯誤您收到? – Igarioshka

回答

9

我在我的控制器有一個Web方法...

在ASP.NET MVC控制器有行動,而不是Web方法。 Web方法已過時。

所以:

public ActionResult GetThemesForSelectedCategory(string themeCategoryId) 
{ 
    IList<ThemeSelectList> themeSelectList = new List<ThemeSelectList>(); 
    int emailLayoutThemeCategoryId = Convert.ToInt32(themeCategoryId); 
    using (var trans = session.BeginTransaction()) 
    { 
     EmailThemeBusinessLogic emailThemeBusinessLogic = new EmailThemeBusinessLogic(session, null); 
     themeSelectList = emailThemeBusinessLogic.GetThemes(emailLayoutThemeCategoryId); 
     trans.Commit(); 
    } 

    return Json(themeSelectList); 
} 

然後:

$.ajax({ 
    type: "POST", 
    url: "/SomeControllerName/GetThemesForSelectedCategory", 
    data: { "themeCategoryId": selectedThemeCategoryId }, 
    success: function (data) { 
     ... 
    }, 
    error: function (xhr, ajaxOptions, thrownError) { 
     ... 
    }, 
    complete: function (data) { 
     ... 
    } 
}); 
+0

感謝您的回覆 我要去嘗試相同的... –

+0

感謝您的回答.. 而不是ActionResult我用JsonResult .. 並解決了我的問題 –