jsonresult正在返回html而不是json

时间:2016-08-03 20:01:58

标签: asp.net json asp.net-mvc web-config

我向Godaddy发布了一个ASP.NET MVC应用程序。我有一个Ajax调用的问题,它应该返回一个JSON对象,它返回我网站的索引页面的HTML。我以前在应用程序的菜单栏链接中遇到问题,他们将重定向到我网站的主页面。我能够通过向我网站的web.config添加规则来解决问题,该规则排除了包含应用程序的子文件夹:<add input="{REQUEST_URI}" pattern="^/(codesnippetapp)" negate="true" />我检查了Chrome中的开发控制台并且请求网址错误。该网址应为http://www.mattdailey.net/codesnippetapp/Home/GetCodeData,而不是http://www.mattdailey.net/Home/GetCodeData

这是Ajax调用和检索JSON的JsonResult函数:

$.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?

更新: 我尝试使用GET方法但出现内部服务器错误。我使用razor @section代码将脚本从外部文件移动到View本身,如下所示:

@section Scripts 
{
... jQuery code
}

然后将其添加到_Layout.cshtml:

@RenderSection("Scripts", required: false)

我确实将剃须刀@ Url.Action助手添加到了Ajax网址。我也改变了将应用程序发布到Godaddy的方式,我认为也是如此。我从FTP方法改为Filesystem。然后我通过FTP手动上传文件。它现在正在运作。

感谢大家的帮助。我写下了我的步骤,希望这能帮助处于类似情况的其他人。

3 个答案:

答案 0 :(得分:0)

在网址值的开头

/会将其作为您网站的根目录(不是您下的应用>)。

使用Url.Action辅助方法生成操作方法的路径。

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

如果你的javascript在剃刀视图中,这应该有用。如果您的代码在外部js文件中,请在剃刀视图中调用此方法并将其分配给变量并在js文件中使用它,如this post的第二部分所述

答案 1 :(得分: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);

}

答案 2 :(得分:0)

当你试图将Json返回给客户端时,这应该是一个GET操作。

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

    }