2013-08-29 2 views
0

Я не могу получить ответ JSON от сообщения Ajax на сайте Dot Net Nuke. Вместо этого он возвращает HTML как ответ.Dot Net Nuke Ajax Response Возврат HTML

Я смог заставить это работать на обычном тестовом сайте просто отлично, и мне интересно, знает ли кто-нибудь, что мне нужно делать.

Ниже приведен код, я тестирую с сейчас:

JavaScript:

$("#ClearTaxFormButton").click(function (e) { 
     e.preventDefault(); 
     var testValue = 7; 

     $.ajax({ 
      type: "GET", 
      url: "localhost/mywebsite/tabid/100/Default.aspx/SumbitByAjaxTest", 
      data: '{ "taxRate":' + testValue + '}', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (msg) { 
       // Replace the div's content with the page method's return. 
       //$("#Result").text(msg.d); 
       alert(msg.d); 
      } 
     }); 
    }); 

C# Функция:

//just using ths for testing 
[WebMethod] 
public static string SumbitByAjaxTest(string taxRate) 
{ 
    return taxRate; 
} 

Как я уже сказал, это точный код (в сторону от другой URL-адрес) отлично работает на обычном .NET-сайте, но когда я переношу его на сайт Dot Net Nuke, он возвращает HTML.

Любые идеи?

+0

Является ли это возвращение HTML или XML? –

+0

он возвращает html. Это просто отображение html самой страницы –

+0

Это потому, что DNN не обрабатывает веб-запросы таким образом, это просто еще один URL-адрес DNN, поэтому он отвечает на страницу. Вам нужно создать сервис, чтобы получить это (как указано ниже) –

ответ

1

Сервисный уровень DNN позволяет вам следовать методу, подобному Webapi, я думаю, что вам будет проще управлять данными в/из.

Вот пример контроллера для модуля с открытым исходным кодом статьи https://dnnsimplearticle.codeplex.com/SourceControl/latest#cs/services/DnnSimpleArticleController.cs

Что-то вроде

public HttpResponseMessage GetAllArticles(int portalId, bool sortAsc) 
     { 
      try 
      { 
       //todo: get the latest X articles? 
       var articles = ArticleController.GetAllArticles(portalId, sortAsc); 

       //because of the circular reference when cerealizing the taxonomy within content items we have to build out our article view models manually. 
       var cleanArticles = new List<ArticleViewModel>(); 
       foreach (Article a in articles) 
       { 
        var newArt = new ArticleViewModel 
        { 
         ArticleId = a.ArticleId, 
         Body = WebUtility.HtmlDecode(a.Body), 
         CreatedByUser = a.CreatedByUser, 
         CreatedByUserId = a.CreatedByUserId, 
         CreatedOnDate = a.CreatedOnDate, 
         Description = WebUtility.HtmlDecode(a.Description), 
         LastModifiedByUser = a.LastUpdatedByUser, 
         LastModifiedByUserId = a.LastModifiedByUserId, 
         LastModifiedOnDate = a.LastModifiedOnDate, 
         ModuleId = a.ModuleId, 
         Title = a.Title, 
         url = DotNetNuke.Common.Globals.NavigateURL(a.TabID, "", "&aid=" + a.ArticleId) 
        }; 
        cleanArticles.Add(newArt); 
       } 

       var articleViewModels = new ArticleViewModels 
       { 
        Articles = cleanArticles 
       }; 

       return Request.CreateResponse(HttpStatusCode.OK, articles); 

      } 
      catch (Exception exc) 
      { 
       DnnLog.Error(exc); //todo: obsolete 
       return Request.CreateResponse(HttpStatusCode.BadRequest, "error in request"); //todo: probably should localize that? 
      } 
     } 
Смежные вопросы