表单(checkbox)批量修改

  最近学了MVC设计模式,在客户端方面也接触了一些东西,今天巧合发现checkbox有这样的功能,如果想要在客户端绑定一个表可利用foreachSystem.Data.DataRow item in Model.Rows),当然我指的是MVC模式,Model指的是从控制器传过来的一个datatable,因为MVC里面有个router功能,它会自动匹配视图和控制器之间传递的数据,这里不做详细介绍……MVC文章待几天发布)还是言归正传吧!

当我想在一个table里面批量修改里面的字段时(注:里面的字段存放在text里面),当然这些数据需要用foreach绑定每一行每一列,直到表尾,如果要在这个表中修改多个记录的多个字段需要怎么才能全部保存到数据库呢?此时,一个checkbox就能帮你忙,假如checkboxid="chkbox" name="chkbox" value=<%=itme["guid"]%> /)其中guid是可以标识这条记录的字段,当你遍历整个表的时候,把checkbox也放进循环体里面,而checkboxvalue也进入循环,要是有10个记录的话,也就有10guid,那么你要取checkbox里面的value怎么取呢?此时,在提交完表单后我发现了一个异常,当我用string guid=Request.Form["chkbox"].ToString()的时候,出现了datetime不能直接转换成string,于是我设下了断点进行调试,看到checkbox里面的value是一长串由‘,’隔开的字符串,好~看到‘,’就开心了,于是把字符串切割成一个由‘,’字符串数组,然后对数组进行循环,每执行一次就取出一个guid,修改的时候要判断是那条记录的text,可以用guid+txtName来标识每个文本框。

例如:<input type="text" name="txtName<%=item["guid"]%>" value="<%=item["字段名"]%>"……这就可以改变某条记录的某个文本框。但是这样做的话,也就是每条记录都要执行一次更新,如果记录少的话,可以忽略不计,如果取出来的table有成千上万条数据的话,那就做了太多的无用功了……于是,新的想法出来了,如果能确定改了那个文本框就更新哪个记录,那么就可以提高效率了……那么就从改变开始想,改变改变,不就是Onchange事件嘛,于是在每个text里面加上了Onchange事件,但Onchange事件发生时记下那条记录的guid,这样就可以避免其他多余的记录被更新。于是想到了隐藏域的作用,可以通过表单提交到服务器……于是就做了一个专门存放触发Onchange事件的隐藏域<input type="hidden" name="hidGuid" value="" Onchage="GetGuid('<%=item["Guid"]%>') ;/>并且定义了一个js函数:(函数功能:把每个被更新过的记录的guid存放到隐藏域,用逗号分隔开)

<script>

function GetGuid(guid)

{

var HiddenGuid=document.getelementbyid("hidGuid");

HiddenGuid.value+=guid+',';

}

</script>

这样就可以把要改变的记录确定下来,然后在后台先把隐藏域的值拆成一个字符串数组,然后用foreach就可以遍历每个待修改的text,这样就实现了较完美的批量修改。

以上只代表个人思路想法,如果谁有更好的方法,欢迎讨论。下一章(浅谈MVC设计模式&&菜鸟眼中的设计模式)……

 

转载于:https://www.cnblogs.com/magicchaiy/archive/2009/12/31/1636523.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值