【问题标题】:JQuery AJAX and asp.net pageJQuery AJAX 和 asp.net 页面
【发布时间】:2016-03-23 12:31:01
【问题描述】:

我在一个 aspx 页面上有以下设置:

<asp:Content ID="contentBody" ContentPlaceHolderID="body" Runat="Server">
    <div class="Container-WithoutSideBar">
        <asp:Label ID="TextTitle" runat="server" AssociatedControlID="ArticleTitle" Text="Title " />
        <asp:TextBox ID="ArticleTitle" TextMode="SingleLine" runat="server"></asp:TextBox>       
...
</asp:Content>

以及以下 JQuery AJAX:

function fnGetArticleHTML()
{
    var articleText = JSON.stringify(tinyMCE.activeEditor.getContent());
    $.ajax({
        type: "POST",
        url: 'adminpageadd.aspx/SubmitArticleHTML',
        data: "{ 'ArticleHTML': " + articleText + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            alert("Article saved");
        },
        error: function (xhr, ajaxOptions, thrownError) {
            //alert("Error Saving Article");                    
            alert(xhr.responseText);
       }
    });            
    return false;
}

一切正常。

以及服务器端代码:

[System.Web.Services.WebMethod]
public static string SubmitArticleHTML(string ArticleHTML)
{        
    news_adminpageadd addArticle = new news_adminpageadd();

    return addArticle.SubmitArticle(ArticleHTML);
}

private string SubmitArticle(string ArticleHTML)
{
    return ArticleTitle.Text;
}

问题是,当我尝试返回 Article.Text,这是 asp:TextBox 的内容时,我得到以下异常:

{"Message":"Object reference not set to an instance of an object.","StackTrace":"   at news_adminpageadd.SubmitArticle(String ArticleHTML) in .....\news\\adminpageadd.aspx.cs:line 69\r\n   at news_adminpageadd.SubmitArticleHTML(String ArticleHTML) in ....\news\\adminpageadd.aspx.cs:line 64","ExceptionType":"System.NullReferenceException"}

这基本上是在说:

ArticleTitle.Text;

未设置为不是对象的实例。

我知道情况并非如此,因为在 Page_load 上它工作正常。

我认为与 WebMethod 的交互以某种方式存在问题,但我该如何解决呢?

将文本框设置到客户端并通过 AJAX 传递它对我没有帮助,因为我需要它在服务器端加载正确的值。

我已经尝试找到控件,但这仍然给出了相同的异常。

有什么想法吗?

【问题讨论】:

  • 您无法从 Web Methods 访问 Web 表单控件(即&lt;asp:TextBox /&gt;)。您必须将值传递给您的 Web 方法。

标签: jquery asp.net ajax webmethod


【解决方案1】:

我像这样将变量传递给服务器端(我相信我可以稍微整理一下):

function fnGetArticleHTML()
{
    var articleText = JSON.stringify(tinyMCE.activeEditor.getContent());
    var ArticleTitle = JSON.stringify($('#<%=ArticleTitle.ClientID%>').val());
    var ArticleAuthor = JSON.stringify($('#<%=AuthorName.ClientID%>').val());
    var ArticlePosition = JSON.stringify($('#<%=AuthorPosition.ClientID%>').val());
    var ArticlePhonNo = JSON.stringify($('#<%=AuthorPhone.ClientID%>').val());
    var ArticleEmail = JSON.stringify($('#<%=AuthorEmail.ClientID%>').val());
    var ArticleWebsite = JSON.stringify($('#<%=AuthorWebsite.ClientID%>').val());
    var ArticleCategory = JSON.stringify($('#<%=ArticleCategories.ClientID%>').attr('value'));

    $.ajax({
        type: "POST",
        url: 'adminpageadd.aspx/SubmitArticleHTML',
        data: "{ 'ArticleHTML': " + articleText + ", 'ArticleTitle':" + ArticleTitle + ", 'ArticleAuthor':" + ArticleAuthor + ", 'ArticlePosition':" + ArticlePosition + ", 'ArticlePhonNo':" + ArticlePhonNo + ", 'ArticleEmail':" + ArticleEmail + ", 'ArticleWebsite':" + ArticleWebsite + ", 'ArticleCategory':" + ArticleCategory + "}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            alert("Article saved: " + response.d);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert("Error Saving Article");                                        
       }
    });            
    return false;
}

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多