将字符串从AJAX传递到ASP.NET C#代码

时间:2016-12-06 20:43:44

标签: c# asp.net ajax

我是JS的新手,在AJAX上经验较少。我只是想将值传递给后面的代码并返回扩展的响应。 问题是,尽管调用成功,从AJAX传递给C#的字符串值绝不是“未定义”,而是让我疯了。

JS

23

背后的守则

function test() {
var message = "this is a test" ;
Display(message);}

function Display(words) {    
var hummus = { 'pass': words};
$.ajax({
    type: 'POST',
    url: 'Account.aspx/ShowMe',
    data: hummus,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',        
    success: function (response) {
        alert("Your fortune: " + response.d);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
       alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words + "\n\nError: " + lion);
    }    
});}

最终的结果总是“你的财富:未定义。我们重申这只是一个考验。” 我只想知道我错过了什么。 是的,这可能是一个愚蠢的问题,但我的搜索没有任何帮助。

3 个答案:

答案 0 :(得分:4)

您的问题是您尝试接受方法public static string ShowMe(string pass)中的字符串,但是您正在传递JavaScript对象作为数据。看看你何时进行Ajax调用ASP.Net将尽力将你发布的数据与参数中的类型相匹配 - 称为模型绑定。如果无法实现,则传入null。

因此,在JavaScript中,您使用以下方法传递JavaScript对象:

var hummus = { 'pass': words};
$.ajax({
    ....,
    ....,
    data: hummus,

如果你想发布一个对象,那么你的控制器/方法需要有一个你的JS将被绑定的C#模型(类)。

因此,请更改您的方法以接受模型:

// somewhere in your code put this little model
// this is what your JavaScript object will get bound to when you post
public MyModel{
   // this is to match the property name on your JavaScript  object, its case sensitive i.e { 'pass': words};
   public string pass {get;set;} 
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string ShowMe(MyModel model)
{
    // you can now access the properties on your MyModel like this
    string beans = model.pass + ". We repeat this is only a test.";    
    return beans;
}

答案 1 :(得分:1)

我在您的代码中发现了两个问题 -

  1. 缺少data: JSON.stringify(hummus),
  2. 删除不存在变量的狮子。
  3. 修复

    function test() {
        var message = "this is a test";
        Display(message);
    }
    
    function Display(words) {
        var hummus = { 'pass': words };
        $.ajax({
            type: 'POST',
            url: 'Account.aspx/ShowMe',
            data: JSON.stringify(hummus), // Missing JSON.stringify
            contentType: 'application/json; charset=utf-8',
            dataType: 'json', 
            success: function (response) {
                alert("Your fortune: " + response.d);
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                // remove lion which variable doesn't exist.
                alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words);
            }
        });
    }
    

    工作代码

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Account.aspx.cs" Inherits="WebApplication1.Account" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
            <button type="button" onclick="test()">Display Word</button>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    
            <script type="text/javascript">
    
                function test() {
                    var message = "this is a test";
                    Display(message);
                }
    
                function Display(words) {
                    var hummus = { 'pass': words };
                    $.ajax({
                        type: 'POST',
                        url: 'Account.aspx/ShowMe',
                        data: JSON.stringify(hummus), // Missing JSON.stringify
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        success: function (response) {
                            alert("Your fortune: " + response.d);
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) {
                            // remove lion which variable doesn't exist.
                            alert("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + words);
                        }
                    });
                }
    
            </script>
        </form>
    </body>
    </html>
    
    
    public partial class Account : System.Web.UI.Page
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public static string ShowMe(string pass)
        {
            string beans = pass + ". We repeat this is only a test.";
    
            return beans;
        }
    }
    

答案 2 :(得分:0)

谢谢你的帮助。我将尝试使用Model方法,JSON.stringify是我之前尝试过并最终工作的东西。

显然问题是我不了解我的浏览器是如何工作的。无论我做出什么改变,我都会遇到同样的错误。原因?

我的代码不在页面上的标签中,它位于一个单独的js文件中,Chrome正在为我缓存,实际上否定了我所做的每一项更改,以便尝试纠正问题并让我疯狂这个过程。

总而言之,我学会了一种新技术,模型绑定,以及代码位置可以极大地影响您的Javascript体验。