【问题标题】:Passing string from AJAX to C# code behind将字符串从 AJAX 传递到 C# 代码后面
【发布时间】:2017-07-24 15:15:20
【问题描述】:

我已经看过很多关于这个主题的 cmets,并且我已经尝试了一些建议的方法来完成这个,但我仍然无法访问后面的代码。错误消息随成功例程返回。我使用 Select2 作为输入源(没有列表,只有操作员希望输入的内容),以便通过 ajax 将多个条目传递到我的代码后面。我相信数据类型可能与背后的代码不同,但除了我拥有的之外,不确定如何定义它,或者它是否已被弃用,我不知道。发生错误时我更改为原始编程。 myData 更改为模型以匹配后面的代码。 如果我输入“测试”和“复制”,这就是我在 select2 中得到的内容。

模型后值为:test,copy

这是我的客户端代码:

...
<select id="SearchSelect" style="width: 150px" name="SearchSelct" 
multiple onmouseover="SearchTip('#SrchToolTip','#hdnviewsrch');return 
false;"></select>
    <textarea id="SrchToolTip" style="color:blue" hidden="hidden">You can 
enter any keyword you like.</textarea>
    <br />
    <br />
<asp:Button ID="SearchFnd" runat="server" Text="Submit" 
OnClientClick="SearchSel('#SearchSelect');return false;" 
ValidateRequestMode="Disabled" UseSubmitBehavior="False"/>

<script type="text/javascript">
    $(document).ready(function () {
    //On client side - Here we render the Select 2
    $("#SearchSelect").select2(
    {
        placeholder: "Enter Search Parameters",
        tags: true,  
        tokenSeparators: [','], 
        allowClear: true,  
        minimumInputLength: 1,  
        width: 'resolve',   
        });
    });
    $("#SearchSelect").on("change", function (e) { 
SearchChange("SearchSelect"); });

    function SearchTip(SrchElem) {
        $(SrchElem).show();
        console.log("Search Tip value is: " + $("#SearchSelect").val());
        };

    function SearchChange(name, evt) {
        console.log("Search Change value is: " + $("#SearchSelect").val() 
+ "; Name: " + name);
    };
    function SearchSel(SchElem) {
        var model= { "SrchData": $(SchElem).val() };
        $.ajax(
        {
            type: "POST",    
            url: '<%= ResolveUrl("~/Default.aspx/SearchFind") %>', 
            data: JSON.stringify(model.SrchData),
            dataType: 'json',
            contentType: "application/json; charset=utf-8", 
            success: function (result) {
                alert('success');
                console.log("Search data obtained: " + result);
            },

            error: function (jqXHR, textStatus, errorThrown) {
                alert("error: " + errorThrown);
            },
            failure: function () {
            alert('Failure');
            }
            processResults: function (data, params) {
                console.log("Search data obtained: " + data);
                return {
                    results: data.d,
                    pagination: {
                        more: data.more
                    }

                };
             }
        });
    }
    </script>

下面是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Web.Script.Services;

namespace WebApplication2
{
  public partial class _Default : Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public class Schdata
    {
        public string SrchData { get; set; }
    }

    [WebMethod()]
    //  [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public static string SearchFind(Schdata model)
    {
        System.Diagnostics.Debug.WriteLine("Went into the SearchFind 
        subroutine " + model.SrchData);
        return "1";
        }

    }
}

这是错误信息:

成功! {"Message":"身份验证失败。","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}

程序说它成功但给出了一个错误,即返回(或发送)值为 null 但在后面的代码中我在 System.Diagnostics.Debug.WriteLine... 行有一个断点,它永远不会到达那里。 任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试过访问 以确保客户端可以访问它?如果做不到这一点,您能否确保发布预期的数据?
  • 这是可行的。我在许多其他页面中都使用过它。我知道的唯一方法是在通过 Ajax 发送之前将其写入控制台。另外,在我进入 Ajax 之前,我已经对答案进行了字符串化,但它并没有改变任何东西。谢谢。
  • 看看我在下面链接中的回答是否有帮助:stackoverflow.com/questions/40957556/…
  • 这不需要是“model”而不是“SrchData”来匹配webmethod的参数。 var myData = { "SrchData": $(SchElem).val() };
  • 这两个链接是相同的。我主要想将值传递给我的代码。我只是检索数据以显示我已完成该过程。您能告诉我使用 HTTP Post 代替 Ajax 的目标是什么吗?我在页面上的所有其他实例中都使用 Ajax。 HTTP更好吗?我已经更改了代码以对返回值进行字符串化,但没有更改。感谢您的意见

标签: c# jquery asp.net ajax jquery-select2


【解决方案1】:

在你的代码后面

public partial class _Default : Page
{
   string myStrCb = "Value from back";
   protected void Page_Load(object sender, EventArgs e)
   {
     //... any code
   }
   // ...more code
}

在你前面的代码中

<script>
  var myJsVar = <%=myStrCb %>
</script>

在脚本中使用

function WriteValue()
{
  console.log(myJsVar); // Value from back
}

【讨论】:

  • 感谢您抽出宝贵时间,但这不是我的问题。我可以从后端获取我想要的任何数据,这是从 Ajax 获取值到后端的问题。我收到了来自 AJAX 的成功消息,但它不会转到服务器端的子程序并给我一个空值的错误消息。
猜你喜欢
  • 2016-07-29
  • 2017-07-01
  • 2014-01-01
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2011-10-23
相关资源
最近更新 更多