在我的aspx页面中调用Ajax

时间:2015-04-21 09:33:02

标签: c# asp.net gridview

我正在尝试调用我的函数" InsertMethod"使用Ajax但函数未被调用。 但是如果我在新页面中使用与下面相同的代码,那么它的工作即使用Ajax给出函数调用。任何人都可以帮我解决这个问题。 我还有一个问题。我无法通过该Web方法访问任何页面控件" Insertmethod"

下面是脚本

<script type="text/javascript">
    function getDistinctChains() {
        $.ajax({
            url: 'Tax_Type_Master.aspx/InsertMethod',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            data: "{'Name':'" + TaxType.value + "'}",
            //async: false,
            success: function(response) {
                $('[id*=txtTaxtypeName]').val('');
                alert("Record Has been Saved in Database");
            },
            error: function() { //console.log('there is some error'); 
                alert('there is some error');
            }
        });
    }
    $(document).ready(function() {
        $('[id*=ImageSaveFooter]').click(function() {
            getDistinctChains();
        });
    });
</script>

下面是我的cs代码

public partial class Tax_Type_Master : System.Web.UI.Page
{
    Generic gn = new Generic();
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            if (!IsPostBack)
            {
                Master.FillHeader("Tax Type Master");
                BindGrid();
            }
        }
        catch (Exception ex)
        {
            Master.ErrorMessage(ex.Message);
        }
    }
}

[WebMethod]
[System.Web.Script.Services.ScriptMethod(ResponseFormat =     
    System.Web.Script.Services.ResponseFormat.Json,
    UseHttpGet = false)]
public static string InsertMethod(string Name)
{
    TextBox TaxTypeName = (TextBox)grd_Master.FooterRow.FindControl("txtTaxtypeName");

    int count = (int)gn.ExecuteScaler("Check_TaxType_Ref_TaxTypeMaster", TaxTypeName.Text.ToUpper().Trim());

    if (count == 0)
    {
        gn.ExecuteNonQuery("Insert_Taxtype_Master",  
        TaxTypeName.Text.ToUpper().Trim());
        BindGrid();
        Master.SuccessMessage("Record Inserted Successfully..");
    }
    else
    {
        Master.ValidationMessage("Record Already Exist..");
    }
    return "True";
}

3 个答案:

答案 0 :(得分:0)

您需要定义正在使用的jquery版本:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#<%= Button1.ClientID %>").click(function (e) {
            e.preventDefault();
            $.ajax({
                type: "POST",
                ...

答案 1 :(得分:0)

有一个替代方法可以使用这样的查询字符串: -

http://localhost/Tax_Type_Master.aspx?m=InsertMethod

在页面加载时调用InsertMethod使用: -

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString.HasKeys() ||
                !string.IsNullOrEmpty(Request.QueryString["m"]))
        {
            var m = Request.QueryString["m"];

            switch (m)
            {
                case "InsertMethod":
                    InsertMethod("Name");
                    break;
            }
        }
    }

您的InsertMethod是这样的: -

public void InsertMethod(string Name)
    {
        Page.Controls.Add(new Literal(){Text = "<script>alert('method called');</script>"});
    }

修改你的ajax调用: -

$.ajax({
            url: 'Tax_Type_Master.aspx?m=InsertMethod',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            data: "{'Name':'" + "asdf" + "'}",
            //async: false,
            success: function (response) {
                if (response.d) {
                    $('[id*=txtTaxtypeName]').val('');
                    alert("Record Has been Saved in Database");
                }
            },
            error: function () { //console.log('there is some error'); 
                alert('there is some error');
            }
        });

希望得到这个帮助。

答案 2 :(得分:0)

  

我还有一个问题。我无法访问该方法“Insertmethod”

中对页面的任何控制

它应该是这样的,你不能通过PageMethod访问页面控件,因为它们是静态的,并且无法访问页面的控件集合。

从您的代码中可以看出,您使用的是文本框。因此,只需在ajax方法中添加CssClass即可访问它。

<asp:TextBox ID="txtTaxtypeName" runat="server" CssClass="myclass"></asp:TextBox>

更改这样的ajax调用,以便您可以像这样访问页脚行。

function getDistinctChains() {
    var DTO = { Name = $(".myclass").val() };
    $.ajax({
        .....
        data: JSON.stringify( DTO ),
        success: function(response) {
            .....
        },
        error: function() { 
            .....
        }
    });
}

<小时/> 话虽这么说,这是糟糕的设计,因为你无法绑定asp:GridView中的PageMethod。您要做的是向数据库插入一个值(如果它是唯一的),并使用PageMethod重新绑定GridView。插入就好了。但BindGrid()方法不起作用,因为它无法从静态方法访问grd_Master

您必须使用UpdatePanel或使用第三方插件,例如datatables.netjqGrid

有关详细信息,请阅读此内容。 http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/