2016-08-03 18 views
0

Ich veröffentlichte eine ASP.NET MVC-Anwendung für Godaddy. Ich habe ein Problem mit einem Ajax-Aufruf, der ein JSON-Objekt zurückgeben soll, das den HTML-Code der Indexseite meiner Website zurückgibt. Ich hatte zuvor ein Problem mit den Links zur Menüleiste der App, wo sie auf die Hauptseite meiner Website umgeleitet wurden. Ich konnte das Problem lösen, indem ich der web.config meiner Website eine Regel hinzufügte, die den Unterordner mit der App ausschloss: <add input="{REQUEST_URI}" pattern="^/(codesnippetapp)" negate="true" /> Ich habe die Dev-Konsole in Chrome überprüft und die Anfrage-URL ist falsch. Die URL sollte http://www.mattdailey.net/codesnippetapp/Home/GetCodeData statt, es ist http://www.mattdailey.net/Home/GetCodeDatajsonresult gibt html nicht zurück json

Hier ist der Ajax-Aufruf und die JsonResult Funktionen, die die JSON abrufen:

$.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 }); 

    } 

Was benötige ich, um meine app web.config hinzufügen? Oder muss ich Code zur web.config meiner Website hinzufügen?

UPDATE: Ich versuchte mit der GET-Methode, aber einen internen Serverfehler. Ich zog das Skript aus einer externen Datei in die Ansicht selbst durch den Rasierer @section Code wie folgt verwendet:

@section Scripts 
{ 
... jQuery code 
} 

Dann dies den _Layout.cshtml hinzugefügt:

@RenderSection("Scripts", required: false) 

ich den Rasierer hätte hinzufügen @ Url.Action Helfer zur Ajax URL. Ich habe auch die Art geändert, wie ich die Anwendung auf GoDaddy veröffentliche, was meiner Meinung nach auch geholfen hat. Ich habe von der FTP-Methode zu Dateisystem gewechselt. Ich habe dann die Dateien manuell per FTP hochgeladen. Es funktioniert jetzt.

Danke allen für die Hilfe. Ich schrieb meine Schritte auf in der Hoffnung, dass dies jemand anderem in einer ähnlichen Situation helfen würde.

Antwort

0

/ am Anfang der URL-Wert wird es als der Stamm Ihrer Website (nicht Ihre App unter diesem).

Verwenden Sie die Helpermethode Url.Action, um den Pfad zu Ihrer Aktionsmethode zu generieren.

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

Dies sollte funktionieren, wenn Ihr Javascript in einer Rasiereransicht ist. Wenn der Code innerhalb einer externen js-Datei ist, rufen diese Methode in einer Rasierklinge Ansicht und Zuweisen zu einer Variable und es verwendet, in Ihrer js-Datei, wie im zweiten Teil von this post erklärt

0

Verwendung 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

Sie brauchen nicht für eine angeben 'JsonRequestBehaviour.AllowGet' ** Httppost ** Aktion/Anruf (was die OP tut). Es wird nur benötigt, wenn Sie einen json von einer GET-Aktionsmethode zurückgeben. – Shyju

0

Dies sollte eine GET-Operation sein, da Sie versuchen, Json an den Client zurückzugeben.

$.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); 

    }