问题描述
ajax提交一次之后再次点击检索的时候alert("jinrusubmit");没有被执行新手不理解为什么会这样请高手解答!!$("#doSelect").click(function(){$("#examineeForm").attr("action","/Sample0203/DoSelect");$('#examineeForm').submit(function(){alert("jinrusubmit");if($(this).valid()){varrequest=newSample0203Form();$.ajax({type:"POST",url:'@Url.Action("DoSelect","Sample0203")',dataType:'json',data:JSON.stringify(request),contentType:'application/json',updateTargetId:'divTab1',success:function(data){alert("success:"+data.StrField1);}});}returnfalse;});alert("jinru");$('#examineeForm').submit();});
解决方案
解决方案二:
$.ajax中添加cache:false以防止缓存请求。
解决方案三:
引用1楼qwertxp的回复:
$.ajax中添加cache:false以防止缓存请求。
貌似没有起到作用呀!!感觉解决问题的方向不对!
解决方案四:
缓存了哈,在请求的url后加个随机数吧/Sample0203/DoSelect?a=Math.random()
解决方案五:
引用3楼xiaolll028的回复:
缓存了哈,在请求的url后加个随机数吧/Sample0203/DoSelect?a=Math.random()
不是太懂为什么要加?a=Math.random()???自我感觉解决问题的方向不对!view的代码@modelMvcApplication.Models.Sample0203.Sample0203Form@using(Html.BeginForm("Sample0203","",FormMethod.Post,new{id="examineeForm"})){<tablewidth="960"border="0"cellspacing="0"cellpadding="0"class="alltab"><tr><tdvalign="top"><divclass="bbtab"id="search_condition"><tableborder="0"cellspacing="5"cellpadding="0"><tr><tdcolspan="2"style="font-weight:bold;">■条件設定</td></tr><tr><td><labelclass="label130">店舗コード</label></td><tdcolspan="4"><inputtype="text"name="StrField1"id="StrField1"style="width:100px;height:24px;"maxlength="4"/></td></tr><tr><td><labelclass="label130">コード範囲</label></td><tdcolspan="4"><span><inputtype="text"name="StrField2"id="StrField2"style="width:100px;height:24px;"maxlength="4"/> ~ <inputtype="text"name="StrField3"id="StrField3"style="width:100px;height:24px;"maxlength="4"/></span></td></tr><tr><td><labelclass="label130">メニュー名称</label></td><tdcolspan="4"><inputtype="text"name="StrField4"id="StrField4"style="width:300px;height:20px;"maxlength="40"/></td></tr><tr><td><labelclass="label130">売価範囲</label></td><tdstyle="width:494px"><span><inputtype="text"name="StrField5"id="StrField5"style="width:100px;height:20px;"maxlength="7"/> ~ <inputtype="text"name="StrField6"id="StrField6"style="width:100px;height:20px;"maxlength="7"/></span></td><td><span><inputclass="btn130"value="条件クリア"onclick="doClear()"/><inputclass="btn130"value="検 索"id="doSelect"/></span></td></tr></table></div></td></tr><tr><tdcolspan="2"align="left"valign="top"><divclass="bbtab"id="tableArea"><tablewidth="100%"border="0"cellspacing="5"cellpadding="0"><tr><tdstyle="font-weight:bold;">■検索結果</td></tr><tr><tdcolspan="3"><tablewidth="930"border="0"cellspacing="0"cellpadding="0"class="l_table"><trstyle="background:url(Images/tit23.gif)repeat-x;"align="center"><tdwidth="80">コ一ド</td><td>メニュー名称</td><td>売価</td><td>点数</td><td>金額</td></tr>@if(Model.Commodity.Count>0){for(inti=0;i<Model.Commodity.Count;i++){if((i%2)==0){<trstyle="background:#dfecfa;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Amount)</td></tr>}else{<trstyle="background:#fff;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].AmountDisPlay)</td></tr>}}}</table></td></tr><tr><td><inputclass="btn130"value="全 選 択"/></td><td><inputclass="btn130"value="選択解除"/></td><td><spanstyle="padding-left:283px"><label>小計</label>@*<inputtype="text"name="textfield7"id="textfield7"value='model.StrField7'style="width:150px;height:24px;"/>*@@Html.TextBoxFor(model=>model.StrField7,new{style="width:150px;height:24px;"})@*<inputtype="text"name="textfield8"id="textfield8"style="width:181px;height:24px;"/>*@@Html.TextBoxFor(model=>model.StrField8,new{style="width:150px;height:24px;"})</span></td></tr></table></div></td></tr></table>}Controllers的代码[HttpPost]publicActionResultDoSelect(Sample0203Formsample0203From){boolisAjax=Request.IsAjaxRequest();//Sample0203Formsample0203From=newSample0203Form();sample0203From.Commodity=newList<CommodityModel>();CreateCommodityModelList(sample0203From.Commodity);longpointSum=0;longamountSum=0;foreach(CommodityModeliteminsample0203From.Commodity){pointSum+=Convert.ToInt32(item.Point);amountSum+=Convert.ToInt32(item.Amount);}sample0203From.StrField7=Convert.ToString(pointSum);sample0203From.StrField8=amountSum.ToString("#,
解决方案六:
");returnView("Sample0203",sample0203From);//returnJson(sample0203From,JsonRequestBehavior.AllowGet);}虽然使用ajax来提交但是表单中的数据是sample0203From.Commodity来显示不知道这种做法对不对我的本意是当输入检索条件后点击检索条件能保留下来(所以使用ajax提交)同时表单中的数据表示出来(但是实际执行的时候感觉页面全部刷新了输入检索条件也没有保留下来)求高手解惑!!
解决方案七:
……你的问题表达的就不对你要做局部刷新是吧?那你这种方式就不对啊。你action中返回josn或者字符串。然后ajax中获取到字符串,再对页面的对象操作就好了
解决方案八:
引用5楼xiaolll028的回复:
……你的问题表达的就不对你要做局部刷新是吧?那你这种方式就不对啊。你action中返回josn或者字符串。然后ajax中获取到字符串,再对页面的对象操作就好了
谢谢高手提供解决意见!想法的确是想要这样的结果局部刷新保留输入的检索条件感觉应该是这个原因!按照高手提供的意见下面的这部分html代码就需要用js来写简单的还以但是像这样处理类似datagird的处理感觉太复杂了呜呜不会呀!!!@if(Model.Commodity.Count>0){for(inti=0;i<Model.Commodity.Count;i++){if((i%2)==0){<trstyle="background:#dfecfa;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Amount)</td></tr>}else{<trstyle="background:#fff;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].AmountDisPlay)</td></tr>}}}所以请教高手大侠们对于处理类似这样画面提供一个好的解决方法嘿嘿要是有完整的例子就完美了!!
解决方案九:
把这个换成js操作一样的啊假如返回的json对象{Commodity:[{Code:'1',Name:'0'},{Code:'6101',Name:'西安市'},{Code:'6102',Name:'铜川市'},]}for(vari=0;i<results.Commodity.length;i++){就是拼接html字符串}完了后就是在相应的table后面加个这个节点@if(Model.Commodity.Count>0){for(inti=0;i<Model.Commodity.Count;i++){if((i%2)==0){<trstyle="background:#dfecfa;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Amount)</td></tr>}else{<trstyle="background:#fff;"><td>@Html.DisplayFor(item=>Model.Commodity[i].Code)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Name)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Price)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].Point)</td><td>@Html.DisplayFor(item=>Model.Commodity[i].AmountDisPlay)</td></tr>}}}
解决方案十:
引用6楼zhr19811013的回复:
Quote: 引用5楼xiaolll028的回复:
……你的问题表达的就不对你要做局部刷新是吧?那你这种方式就不对啊。你action中返回josn或者字符串。然后ajax中获取到字符串,再对页面的对象操作就好了谢谢高手提供解决意见!想法的确是想要这样的结果局部刷新保留输入的检索条件感觉应该是这个原因!按照高手提供的意见下面的这部分html代码就需要用js来写简单的还以但是像这样处理类似datagird的处理感觉太复杂了呜呜不会呀!!!
如果你要使用ajax来处理UI展示刷新,那么你的可见的组件就应该使用基于javascript的Grid插件。使用asp.netwebform或者asp.netmvc都是坑爹的,因为它们都是只能支持那种“服务器端一遍遍下载html”的编程方式,不支持ajax来渲染UI的。在前端开发方面,你不应该学习asp.net(用它作点ashx支持ajax数据访问服务即可),而是应该学会使用任何一种基于js的Grid组件。
解决方案十一:
轻量级的ajax方法,不是执行form.submit,所以你的折部分代码应该删除掉。你可以使用ajax方式去下载某个页面的局部的html,在服务器端定义所谓局部视图或者用户控件用于获取html。这在你这个没有经过美工设计、异常简单的页面中是可以方便处理的。你可以搜索一下关于局部刷新html的文章。不过我建议你学会一、两种前端UI框架中的Grid,而不是在服务器端生成这种东西。
解决方案十二:
引用6楼zhr19811013的回复:
所以请教高手大侠们对于处理类似这样画面提供一个好的解决方法嘿嘿要是有完整的例子就完美了!!
为什么要学会前端UI框架的编程开发,而放弃asp.net这类方式呢?拿你这个过于简单的例子来看,假设在下面的Grid中需要编辑,编辑过程中需要局部刷新Grid,那么编辑的状态怎么维持?再比如说tree上的节点被点击、状态改变,这时候要刷新tree,这些状态如何维持?再比如说稍微复杂页面有很多局部刷新的部分,每一部分的id等等如何协调?这些都应该从前端编程上统一设计,进行轻量级的UI编程。而使用“局部刷新html”的方式的程序员只会“丢弃”这些UI交互设计细节,否则就搞不定了。所以如果想大量使用ajax编程,那么我们就相信首先要求程序员“刷新局部内容时不在asp.net端输出html,仅需要输出数据”。因此asp.netwebform和asp.netmvc的UI处理框架都无用。
解决方案十三:
引用10楼sp1234的回复:
Quote: 引用6楼zhr19811013的回复:
所以请教高手大侠们对于处理类似这样画面提供一个好的解决方法嘿嘿要是有完整的例子就完美了!!为什么要学会前端UI框架的编程开发,而放弃asp.net这类方式呢?拿你这个过于简单的例子来看,假设在下面的Grid中需要编辑,编辑过程中需要局部刷新Grid,那么编辑的状态怎么维持?再比如说tree上的节点被点击、状态改变,这时候要刷新tree,这些状态如何维持?再比如说稍微复杂页面有很多局部刷新的部分,每一部分的id等等如何协调?这些都应该从前端编程上统一设计,进行轻量级的UI编程。而使用“局部刷新html”的方式的程序员只会“丢弃”这些UI交互设计细节,否则就搞不定了。所以如果想大量使用ajax编程,那么我们就相信首先要求程序员“刷新局部内容时不在asp.net端输出html,仅需要输出数据”。因此asp.netwebform和asp.netmvc的UI处理框架都无用。
恩谢谢!!大侠高手的指点!结合我提出的问题总结一下使用ajax来提交但是表单中的数据是sample0203From.Commodity来显示这种做法本身就是错误的我应该使用javascript的Grid插件通过Controllers来返回json数据进而给javascript的Grid赋值我会试着使用第三方Grid控件来实现我想要的需求回到我最初提出的问题ajax提交一次之后可以出数据但是再次点击检索的时候alert("jinrusubmit");没有被执行我还是想知道原因请高手解答!!
解决方案十四:
你看看你的提交按钮是不是submit
解决方案十五:
引用8楼sp1234的回复:
Quote: 引用6楼zhr19811013的回复:
Quote: 引用5楼xiaolll028的回复:
……你的问题表达的就不对你要做局部刷新是吧?那你这种方式就不对啊。你action中返回josn或者字符串。然后ajax中获取到字符串,再对页面的对象操作就好了谢谢高手提供解决意见!想法的确是想要这样的结果局部刷新保留输入的检索条件感觉应该是这个原因!按照高手提供的意见下面的这部分html代码就需要用js来写简单的还以但是像这样处理类似datagird的处理感觉太复杂了呜呜不会呀!!!
如果你要使用ajax来处理UI展示刷新,那么你的可见的组件就应该使用基于javascript的Grid插件。使用asp.netwebform或者asp.netmvc都是坑爹的,因为它们都是只能支持那种“服务器端一遍遍下载html”的编程方式,不支持ajax来渲染UI的。在前端开发方面,你不应该学习asp.net(用它作点ashx支持ajax数据访问服务即可),而是应该学会使用任何一种基于js的Grid组件。
看过N个帖子了,@sp1234这家一直说一些高大尚的东西。从来没解决过实际问题,这是在受之以渔?
解决方案:
$('#examineeForm').submit();是不是这行代码覆盖掉了上面代码内的function,所以没有反应???你给这行代码的submit重新写个function,然后alert另外一个内容试试
解决方案:
引用12楼stormem的回复:
你看看你的提交按钮是不是submit
提交按钮不是submit
解决方案:
引用14楼wrqlgd的回复:
$('#examineeForm').submit();是不是这行代码覆盖掉了上面代码内的function,所以没有反应???你给这行代码的submit重新写个function,然后alert另外一个内容试试
如果不加这句话提交不到后台!!按照网上提供的资料returnfalse;是不会提交到后台的实际执行时也没有提交到后台因此$('#examineeForm').submit();是必须的
解决方案:
引用16楼zhr19811013的回复:
Quote: 引用14楼wrqlgd的回复:
$('#examineeForm').submit();是不是这行代码覆盖掉了上面代码内的function,所以没有反应???你给这行代码的submit重新写个function,然后alert另外一个内容试试如果不加这句话提交不到后台!!按照网上提供的资料returnfalse;是不会提交到后台的实际执行时也没有提交到后台因此$('#examineeForm').submit();是必须的
jquery不太熟悉,不过我感觉$('#examineeForm').submit(function(){});这里已经执行了submit了~~~~~