c#接收不到ajax给当前页面传的值

「已注销」 2017-11-23 10:29:19
当前页面url:GoodsDetails.aspx?GoodsID=%201897
前端部分代码:

<asp:DataList ID="GoodsDataList" runat="server" CssClass="datalist">
<div class="f_l add_chose">
<a class="reduce">-</a>
<asp:TextBox ID="Qty" runat="Server" Text="1" CssClass="text num" ReadOnly="true"></asp:TextBox>
<a class="add">+</a>
</div>
<div>
<asp:Button ID="Button1" CssClass="exchange" runat="server" Text="立 即 兑 换" onclick="Button1_Click" OnClientClick='if (!Byval()) { return false; }'/>
</div>
</asp:DataList>

js代码:

//增加
$(".add").click(function () {

var qty = parseInt($(".num").val());

$(".num").val((qty + 1) > 100 ? 100 : (qty + 1));

})
//减少
$(".reduce").click(function () {

var qty = parseInt($(".num").val());

$(".num").val((qty - 1) < 1 ? 1 : (qty - 1));

})
//传值
function Byval() {
//获取数量
var qty = $(".num").val();
alert(qty)
//获取id
var aa = location.search;
var _id = aa.substring(12);
alert(_id);

$.ajax({
type: "post",
dataType: "json",
url: "GoodsDetails.aspx?GoodsID=" + _id + "",
data: { qty: qty },
async:true
})

confirm("你确定要兑换该商品吗?");

return true;
}

alert弹出的结果是对的,后台click事件中获取时,总是报空指针,不知道哪里出了问题,求指教:
int num = int.Parse(Request["qty"].ToString());
...全文
318 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
哦对了,js有个地方错了:

$('#<%= QtyNoAjax.ClientID %>').val(qty);//后面的val还是不一定会赋值
  • 打赏
  • 举报
回复
引用 10 楼 qq_37349626 的回复:
这种方式也只能获取到TextBox的value值1,获取不到jQuery改变后的value值

TextBox Mytext = GoodsDataList.Items[0].FindControl("Qty") as TextBox;
string text = Mytext.Text;
刚开始大概看了一下就没仔细看代码。 我一点一点说。 你如果这样做,那么就不要写后端的click事件了。 你这是做了一个自调用的 ajax 。 因此在你点击按钮的时候发生了什么我详细跟你说一下: 首先因为 OnClientClick 你调用的js会发起一个 ajax 请求道当前页自身的请求……然后获取返回值与否都无所谓但是你要注意你这个请求是另外一个请求,与当前页无关的,相当于你重新打开一个浏览器打开页面(注意还不能打开同一种浏览器共享数据)发起了一个请求,然后根据点击返回了个true或者false。 这时候不管是同步还是异步,你的当前页对自身发起了一个点击请求………… 你猜猜你在截获点击事件的时候,你截获的是点击自身的请求内容呢,还是独立的ajax的请求内容呢? 我知道你想做什么,你就是想在点击的时候把一些值传回到后台,这并不用ajax,因为ASPX的页面直接就支持。 解决方法很简单: 前端扔个input,加上 runat="Server" 。

<asp:DataList ID="GoodsDataList" runat="server" CssClass="datalist">
    <div class="f_l add_chose">
        <a class="reduce">-</a>
        <asp:TextBox ID="Qty" runat="Server" Text="1" CssClass="text num" ReadOnly="true"></asp:TextBox>
        <a class="add">+</a>
    </div>
    <div>
        <asp:Button ID="Button1" CssClass="exchange" runat="server" Text="立 即 兑 换" onclick="Button1_Click" OnClientClick='if (!Byval()) { return false; }'/>
    </div>
</asp:DataList>
<input type='text' name='QtyNoAjax' value=''  runat="Server"   />
js里面加上操作这个input

//传值
         function Byval() {
            var qty = $(".num").val();
            alert(qty);
            $('#QtyNoAjax').val(qty);//这一步可能错误,你自己调试到能赋值就行。
             confirm("你确定要兑换该商品吗?");
            return true;
          }
最后就是后台

string text = QtyNoAjax.Value;
  • 打赏
  • 举报
回复
都在用ajax前后端分离了,非要把ajax获取的东西同步了放在指定位置。 写个ashx再做一个接口调用一下就这么难吗?
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
这种方式也只能获取到TextBox的value值1,获取不到jQuery改变后的value值

TextBox Mytext = GoodsDataList.Items[0].FindControl("Qty") as TextBox;
string text = Mytext.Text;
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 6 楼 liuzhe147 的回复:
[quote=引用 5 楼 xomix 的回复:] [quote=引用 2 楼 qq_37349626 的回复:] [quote=引用 1 楼 xomix 的回复:] 前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
OnClientClick会在后台点击事件前面执行[/quote] 对啊,但是OnClientClick执行的是一个异步事件,不等返回值就直接可以继续执行之后的click了。这个想不明白?你要在异步的正常返回中调用后台事件而不是调用了异步ajax就调用点击这个想不明白?[/quote] 不对吧,先执行OnClientClick 看他的返回值来决定是否执行onClick,true 就执行 false就不执行[/quote] Byval()返回false不执行onClick,OnClientClick 返回false会执行onClick
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 5 楼 xomix 的回复:
[quote=引用 2 楼 qq_37349626 的回复:] [quote=引用 1 楼 xomix 的回复:] 前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
OnClientClick会在后台点击事件前面执行[/quote] 对啊,但是OnClientClick执行的是一个异步事件,不等返回值就直接可以继续执行之后的click了。这个想不明白?你要在异步的正常返回中调用后台事件而不是调用了异步ajax就调用点击这个想不明白?[/quote] 改成同步结果一样的,还是空指针,放在URL中也是这样
  • 打赏
  • 举报
回复

async:fasle
知道这个干啥的吗?
  • 打赏
  • 举报
回复
引用 5 楼 xomix 的回复:
[quote=引用 2 楼 qq_37349626 的回复:] [quote=引用 1 楼 xomix 的回复:] 前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
OnClientClick会在后台点击事件前面执行[/quote] 对啊,但是OnClientClick执行的是一个异步事件,不等返回值就直接可以继续执行之后的click了。这个想不明白?你要在异步的正常返回中调用后台事件而不是调用了异步ajax就调用点击这个想不明白?[/quote] 不对吧,先执行OnClientClick 看他的返回值来决定是否执行onClick,true 就执行 false就不执行
  • 打赏
  • 举报
回复
引用 2 楼 qq_37349626 的回复:
[quote=引用 1 楼 xomix 的回复:] 前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
OnClientClick会在后台点击事件前面执行[/quote] 对啊,但是OnClientClick执行的是一个异步事件,不等返回值就直接可以继续执行之后的click了。这个想不明白?你要在异步的正常返回中调用后台事件而不是调用了异步ajax就调用点击这个想不明白?
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 3 楼 liuzhe147 的回复:
难道是页面接收要用 Request.QueryString["qty"].tostring()
一个意思
  • 打赏
  • 举报
回复
难道是页面接收要用 Request.QueryString["qty"].tostring()
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
OnClientClick会在后台点击事件前面执行
  • 打赏
  • 举报
回复
前端后台执行顺序弄混了,你要在点击前就把数据传出去,不是点击的时候执行一个异步ajax,同时执行异步后台调用。
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 15 楼 xomix 的回复:
[quote=引用 14 楼 qq_37349626 的回复:] [quote=引用 13 楼 xomix 的回复:] 哦对了,js有个地方错了:

$('#<%= QtyNoAjax.ClientID %>').val(qty);//后面的val还是不一定会赋值
datalist外部放一个TextBox,获这个TextBox取编译后的ID,通过ID把jQuery改变的值赋给TextBox,后台直接取QtyNoAjax的value,这方式可行,谢谢[/quote] 你这是不需要ajax强行ajax[/quote] 思路跑偏
  • 打赏
  • 举报
回复
引用 14 楼 qq_37349626 的回复:
[quote=引用 13 楼 xomix 的回复:] 哦对了,js有个地方错了:

$('#<%= QtyNoAjax.ClientID %>').val(qty);//后面的val还是不一定会赋值
datalist外部放一个TextBox,获这个TextBox取编译后的ID,通过ID把jQuery改变的值赋给TextBox,后台直接取QtyNoAjax的value,这方式可行,谢谢[/quote] 你这是不需要ajax强行ajax
「已注销」 2017-11-23
  • 打赏
  • 举报
回复
引用 13 楼 xomix 的回复:
哦对了,js有个地方错了:

$('#<%= QtyNoAjax.ClientID %>').val(qty);//后面的val还是不一定会赋值
datalist外部放一个TextBox,获这个TextBox取编译后的ID,通过ID把jQuery改变的值赋给TextBox,后台直接取QtyNoAjax的value,这方式可行,谢谢

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧