2016-08-03 4 views
0

Я опубликовал приложение ASP.NET MVC для Godaddy. У меня возникла проблема с вызовом Ajax, который должен возвращать объект JSON, который возвращает HTML-индекс страницы индекса моего сайта. Раньше у меня была проблема с ссылками на строку меню приложения, где они перенаправлялись на главную страницу моего сайта. Я смог решить проблему, добавив правило на web.config моего сайта, в котором исключена вложенная папка, содержащая приложение: <add input="{REQUEST_URI}" pattern="^/(codesnippetapp)" negate="true" /> Я проверил консоль dev в Chrome, и URL-адрес запроса неверен. URL должен быть http://www.mattdailey.net/codesnippetapp/Home/GetCodeData вместо этого http://www.mattdailey.net/Home/GetCodeDatajsonresult возвращает html not json

Вот вызов Ajax и функции JsonResult, извлекающие в JSON:

$.ajax({ 
      url: '/Home/GetCodeData', 
      type: 'Post', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      data: JSON.stringify(selectedSnippetID), 
      success: function (data) { 
       if (data.success) { 
        $("#snippetcode").val(data.snippetCode);      
       } else { 
        alert('invalid ID' + data.success); 
       } 
      } 
     }); 
    [HttpPost] 
    public JsonResult GetCodeData(int snippetID) 
    { 

     CodeSnippet returnedsnippet = db.CodeSnippets.FirstOrDefault(d => d.Id == snippetID); 
     if (returnedsnippet != null) 
     { 
      return Json(new { success = true, snippetCode = returnedsnippet.SnippetCode }); 
     } 
     return Json(new { success = false }); 

    } 

Что мне нужно сделать, чтобы добавить в web.config моего приложения? Или мне нужно добавить код на web.config моего сайта?

UPDATE: Я попытался использовать метод GET, но получил внутреннюю ошибку сервера. Я переместил скрипт из внешнего файла в самом View с помощью бритвы код @section так:

@section Scripts 
{ 
... jQuery code 
} 

Затем добавили это к _Layout.cshtml:

@RenderSection("Scripts", required: false) 

Я добавить бритву @ Url.Action помощник к URL-адресу Ajax. Я также изменил способ публикации приложения в Godaddy, что, я думаю, тоже помогло. Я перешел из метода FTP в файловую систему. Затем я загрузил файлы вручную через FTP. Сейчас он работает.

Спасибо всем за помощь. Я написал свои шаги, надеясь, что это поможет кому-то еще в подобной ситуации.

ответ

0

/ в начале значения URL сделает его корнем вашего сайта (не вашим приложением под этим).

Использовать вспомогательный метод Url.Action, чтобы создать путь к вашему методу действий.

url: '@Url.Action("GetCodeData","Home")', 

Это должно работать, если ваш javascript находится внутри бритвы. Если ваш код находится внутри внешнего файла JS, вызовите этот метод в целях бритвы и присвоить его переменной и использовать его в файле JS, как описано во второй части this post

0

использования JsonRequestBehavior.AllowGet

public JsonResult GetCodeData(int snippetID) 
{ 

    CodeSnippet returnedsnippet = db.CodeSnippets.FirstOrDefault(d => d.Id == snippetID); 
    if (returnedsnippet != null) 
    { 
     return Json(new { success = true, snippetCode = returnedsnippet.SnippetCode },JsonRequestBehavior.AllowGet); 
    } 
    return Json(new { success = false },JsonRequestBehavior.AllowGet); 

} 
+0

Вам не нужно указывать 'JsonRequestBehaviour.AllowGet' для ** действия/вызова ** HttpPost ** (что делает OP). Это необходимо, только если вы возвращаете некоторый json из метода действия GET. – Shyju

0

Это должна быть операция GET, поскольку вы пытаетесь вернуть Json клиенту.

$.ajax({ 
      url: '/Home/GetCodeData', 
      type: 'GET', 
      contentType: 'application/json; charset=utf-8', 
      dataType: 'json', 
      data: JSON.stringify(selectedSnippetID), 
      success: function (data) { 
       if (data.success) { 
        $("#snippetcode").val(data.snippetCode);      
       } else { 
        alert('invalid ID' + data.success); 
       } 
      } 
     }); 

    public JsonResult GetCodeData(int snippetID) 
    { 

     CodeSnippet returnedsnippet = db.CodeSnippets.FirstOrDefault(d => d.Id == snippetID); 
     if (returnedsnippet != null) 
     { 
      return Json(new { success = true, snippetCode = returnedsnippet.SnippetCode }, JsonRequestBehavior.AllowGet); 
     } 
     return Json(new { success = false }, JsonRequestBehavior.AllowGet); 

    } 
Смежные вопросы