我正在尝试调用我的函数" 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";
}
答案 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.net或jqGrid
有关详细信息,请阅读此内容。 http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/