C# Response.StatusDescription未从JsonResult发送到jQuery

C# Response.StatusDescription未从JsonResult发送到jQuery,c#,jquery,json,asp.net-mvc-3,C#,Jquery,Json,Asp.net Mvc 3,请记住,我对MVC、Json、jQuery等的工作方式还比较陌生,所以请耐心听我说。过去5年我一直在做网络表单 我正在验证模式弹出窗口中的表单,该弹出窗口使用JsonResult方法将表单数据发布到服务器。我希望我可以在弹出窗口中加载一个部分视图并完成它,但这不是一个选项 不管怎样,我昨天有一些代码在工作,但是在我用Git拉/推之后,我的验证出了点问题。在将任何内容(必填字段、正确的数据类型等)传递到服务器之前,我使用常规JavaScript进行一些基本验证,但有些事情,例如确保用户类型中的名称

请记住,我对MVC、Json、jQuery等的工作方式还比较陌生,所以请耐心听我说。过去5年我一直在做网络表单

我正在验证模式弹出窗口中的表单,该弹出窗口使用JsonResult方法将表单数据发布到服务器。我希望我可以在弹出窗口中加载一个部分视图并完成它,但这不是一个选项

不管怎样,我昨天有一些代码在工作,但是在我用Git拉/推之后,我的验证出了点问题。在将任何内容(必填字段、正确的数据类型等)传递到服务器之前,我使用常规JavaScript进行一些基本验证,但有些事情,例如确保用户类型中的名称是唯一的,需要我一直到业务逻辑

在浏览了互联网之后,我发现如果希望jQuery在AJAX请求中识别JsonResult中的错误,那么必须发送错误性质的HTTP状态代码。我相当肯定它可以是400或500的任何数字,它应该可以工作……而且它确实……在一定程度上

我要做的是使用Response.StatusCodeResponse.StatusDescription设置状态代码和状态描述,然后返回模型。jQuery将识别错误,然后显示我在状态描述中设置的错误消息。一切都很好

今天,似乎从控制器中的JsonResult到jQuery的唯一内容就是状态代码。我在c#中进行了跟踪,似乎所有内容都设置正确,但我似乎无法提取我设置的自定义状态描述

以下是我的代码:

模式弹出窗口

<fieldset id="SmtpServer_QueueCreate_Div">
    @Form.HiddenID("SMTPServerId")
    <div class="editor-label">
        @Html.LabelFor(model => model.ServerName)
        <br />
        <input type="text" class="textfield wide-box" id="ServerName" name="ServerName" title="The display name of the Server" />
        <br />
        <span id="ServerNameValidation" style="color:Red;" />
    </div>
    <div class="editor-label">
        <span id="GeneralSMTPServerValidation" style="color:Red;" />
    </div>
    <br />
    <p>
        <button type="submit" class="button2" onclick="onEmail_SmtpServerQueueCreateSubmit();">
        Create SMTP Server</button>
        <input id="btnCancelEmail_SmtpServerQueueCreate" type="button" value="Cancel" class="button"
        onclick="Email_SmtpServerQueueCreateClose();" />
    </p>
</fieldset>
jQuery Ajax请求

$.ajax({
            type: 'POST',
            data: { ServerName: serverName },
            url: getBaseURL() + 'Email_SmtpServer/_QueueCreate/',
            success: function (data) { onSuccess(data); },
            error: function (xhr, status, error) {
                $('#GeneralSMTPServerValidation').html(error);
            }
        });
正如我昨天提到的,这向用户显示了一条很好的消息,告知他们输入的名称如果碰巧存在,则不是唯一的。现在,我得到的只是一条“内部服务器错误”消息……这是正确的,因为当我设置状态代码时,这就是我在邮件中发送的内容。但是,正如我提到的,它不再看到我发送的自定义状态描述

我还尝试将其设置为一些未使用的状态代码,以查看这是否是问题所在,但这根本没有显示任何内容,因为它不知道要显示什么文本

谁知道呢?也许我的代码现在出了问题。很可能是其他地方发生的变化,那可能是什么,我不知道。有人对可能出现的问题有什么想法吗

如果你需要更多的代码,我会尽力提供


谢谢

在错误回调中,尝试使用

xhr.statusText
此外,如果您使用的是Visual Studio的Web服务器,则可能无法返回状态文本。

你知道,事实上可能就是这样……但我不知道是否可以测试一下。呃…不稳定的解决方案。我确实尝试了xhr.StatusText…同样的结果。我在其他几个地方看到了这个解决方案。我想我应该提到我已经试过了。如果您没有访问完整IIS安装的权限,请尝试IIS Express。是的,就是这样。本地VS Web服务器似乎不喜欢自定义状态描述。现在真是魅力四射!谢谢在web项目的属性中,找到web选项卡。有一个复选框标记为“使用IIS Express”,实际上它应该是
xhr.statusText
(区分大小写!)。
xhr.statusText