【问题标题】:500 internal server is showing when server side method is call from AJAX从 AJAX 调用服务器端方法时显示 500 内部服务器
【发布时间】:2017-06-16 09:14:27
【问题描述】:

我的问题是,当时我在浏览器控制台中将数据从 AJAX 调用到 ASP.NET C# 中的服务器端方法时显示错误,即 500 内部服务器错误。

这是我的客户端代码,

 <label for="fname">Name</label>
    <input type="text" id="txt_name" placeholder="Your Name.."/>

    <label for="lname">EmailID</label>
    <input type="text" id="txt_emailID" placeholder="Your EmailID.."/>

    <label for="lname">Subject</label>
    <input type="text" id="txt_subject" placeholder="Your Subject.."/>

    <label for="subject">Content</label>
    <textarea id="txt_content" placeholder="Write content.." style="height:200px"></textarea>

    <input type="submit" id="submit_mail" value="Send"/>


<script>
    $(function () {
        $("#submit_mail").click(function () {
            $.ajax({
                type: "POST",
                url: "contact.aspx/SendMail",
                data: "{name: $('#txt_name').val(), email: $('#txt_emailID').val(), subject: $('#txt_subject').val(), message: $('#txt_content').val()}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: OnSuccess,
                failure: function (response) {
                    alert(response.d);
                }
            });
        });
    });

    function OnSuccess(response) {
        alert(response.d);
    }

</script>       

这是服务器端的代码

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
protected void SendMail(string name, string email, string subject, string message)
{
}

谢谢

【问题讨论】:

  • 那是您的实际 C# 代码吗?另请注意,您发送的data 无效。您最好删除字符串周围的引号,并为 jQuery 提供一个可以自行序列化的对象。
  • 是的,它只是实际的 c# 代码。你能告诉我我的代码的语法吗?
  • 只需删除您提供给data 的值周围的"。然后你需要在生成有效响应的 C# 方法中实际放置一些逻辑
  • 我做过这样的数据:{name: $('#txt_name').val(), email: $('#txt_emailID').val(), subject: $('# txt_subject').val(), message: $('#txt_content').val()},但同样的问题也来了
  • 去掉引号后,您可以尝试在该对象上调用 JSON.stringify

标签: c# jquery asp.net ajax


【解决方案1】:

WebMethod 应该是 public static 而不是 protected,因为我们不是从同一个类/子类调用它。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void SendMail(string name, string email, string subject, string message)
{
}

也试试

data: JSON.stringify({name: $('#txt_name').val(), email: $('#txt_emailID').val(), subject: $('#txt_subject').val(), message: $('#txt_content').val()}),

而不是纯字符串。

【讨论】:

  • 我已从受保护更改为公开,但同样的错误即将到来。
  • 乐于助人
【解决方案2】:

第1步:请尝试不带参数,如下所示

     [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    protected void SendMail()
    {
    }

并从 ajax 中删除行:data: "{name: $('#txt_name').val(), email: $('#txt_emailID').val(), subject: $('#txt_subject').val(), message: $('#txt_content').val()}",

请尝试第 1 步并检查是否仍然出现错误。

第 2 步:更新(保护为公共静态)

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static void SendMail()
{
}

第 3 步:

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static void SendMail(string name)
    {
    } 

现在更新在 ajax 调用检查中添加 data: "{name: $('#txt_name').val()}"

【讨论】:

    【解决方案3】:

    如果你转换它会更好 SendMail(字符串名称、字符串电子邮件、字符串主题、字符串消息) 进入 SendMail(电子邮件)

    class Email 
    {
        string name;
        string email;
        string subject;
        string message;
    }
    

    【讨论】:

    • 但是调用 ajax 后没有在 sendmail 方法中调用,它只显示内部错误
    【解决方案4】:

    你需要在你的页面中添加脚本管理器控件,添加后web方法调用才能执行。

    【讨论】:

      猜你喜欢
      • 2017-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-10
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多