如何一次提交多条记录

chenguang79 2009-02-13 03:30:08
我要的功能是,前台有二个文本框,一个是姓名,一个是性别,另上有一个按钮(添加)当我点添加的时候,就会再出现二个相应该的文本框,也是姓名与性别,我现在想知道的是,我如果有多个这样的文本框,我在后台如何得到其中的值。
下面是我的前台代码,已经可以完成点按钮出二个文本框了。主要是在CS文件中如何得到其中的值。
<head runat="server">
<title></title>
<script language="javascript" type="text/javascript">
function addFile(max)
{
var Text1 = document.getElementsByName("Text1");
//var Text2 = document.getElementsByName("Text2");
//alert(file.length);
if (Text1.length == 1 && Text1[0].disabled == true)
{
Text1[0].disabled = false;
return;
}

if (Text1.length < max)
{

var fileButton = '<br />姓名:<input id="Text1" name="Text1" type="text" />    性别:<input id="Text2" name="Text2" type="text" />';
//alert(fileButton);
document.getElementById("FileList").insertAdjacentHTML("beforeEnd",fileButton);
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<p id="FileList">

姓名:<input id="Text1" name="Text1" type="text" />    性别:<input id="Text2" name="Text2" type="text" />


</p>

<input id="Button2" type="button" value="添加" onclick="addFile(4)" />
<br><br><asp:Button ID="Button1" runat="server" Text="Button"
onclick="Button1_Click" />
</form>
</body>
</html>
...全文
381 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
kke_007 2009-02-14
  • 打赏
  • 举报
回复
学习
jlj84237485 2009-02-14
  • 打赏
  • 举报
回复
帮顶一下
perisonchen 2009-02-14
  • 打赏
  • 举报
回复
javascript遍历对象(DHTML),获取值,放到隐藏域,提交,后台再处理就可以了
qinqinhao 2009-02-14
  • 打赏
  • 举报
回复
ding
春天的气息 2009-02-14
  • 打赏
  • 举报
回复
怎么动态增加的,就怎么读取呀,

增加的如果用数组,读取也用数组,
如果增加没用,但也应有规律吧,用数组读取也是可以的。
stonehy520 2009-02-14
  • 打赏
  • 举报
回复
学习
秋儿-Angel 2009-02-14
  • 打赏
  • 举报
回复
好帖 !!
liuyeede 2009-02-13
  • 打赏
  • 举报
回复
就用两个文本框就够了吧?
建立一个List<包括姓名、性别的实体类>,每当点击“添加",通过两个文本框中的内容建立体类,并添加到列表中。然后你只要不关闭本页,你想怎么操作就怎么操作。保存可以通过列表生成多个insert语句,一次送人数据库。
Delta 2009-02-13
  • 打赏
  • 举报
回复
只是来学习的,呵呵
路人乙e 2009-02-13
  • 打赏
  • 举报
回复
<p>姓名:<input id=text1 type=text /> 性别:<input id=text2 type=text /></p>
<p>姓名:<input id=text3 type=text /> 性别:<input id=text4 type=text /></p>
<p>姓名:<input id=text5 type=text /> 性别:<input id=text6 type=text /></p>
..........
<input type=button value="提交" onclick="submitform()"/>
<input id=hd_data type=hidden />
<script>
function submitform()
{
var data = "";
var len = document.getElementsByTagName("input").length;
for(var i=1;i<len;i++){
var e = document.getElementById("text"+i);
if(!e) break;
data += e.value + i%2==0?"$":"|";
}
document.getElementById("hd_data").value = data;
//这样就可以从后台获取hidden控件hd_data的值,即所有的姓名和性别(格式:姓名1|性别1$姓别二|性别2$...)
}
</script>
mqc507 2009-02-13
  • 打赏
  • 举报
回复
大体思路是这样的(包括入库和修改库记录)

var x;
循环生成的 Html是:
var id="item"+x;


<div id='"+id+"'><input type="text" name="Iname" /><input type="text" name="IGeneral" /><input type="button" onclick=deleteItem('"+x+"') /> </div>

将其添加到
<div id="itemBox"></div>



通过
<input type="submit" name="Submit" value="Save" onclick="return checkInfo();"> 
提交,在后台代码中处理


string[] Names= Request.Form.GetValues("Iname");
string[] Generals= Request.Form.GetValues("IGeneral");


如上就得到了你动态生成的html里面的内容,Names[0]与Generals[0]对应,Names[1]与Generals[1]对应......
写入数据库就好了。

下面是修改库记录:
我用直接用Repeater来绑定,格式写成和生成的html格式一样:

<ItemTemplate>

<div id="item<%#Container.ItemIndex%>"><input type="text" name="Iname" /><input type="text" name="IGeneral" /><input type="button" onclick=deleteItem('<%#Container.ItemIndex%>') /> </div>

</ItemTemplate>


由于生成的html:
var x;

<div id="item"+ x><input type="text" name="Iname" /><input type="text" name="IGeneral" /><input type="button" onclick=deleteItem('"+x+"') /> </div>

是有个x作标识的,所以我们要知道数据库已经有的记录条数,以便确定初始的x的值,才能不覆盖原来记录地添加数据。
这里我们在html中添加了段Js来获取的:

<script type="text/javascript">x=document.getElementById("itemBox").getElementsByTagName("div").length-1;</script>

这样我们的 addItem方法就不需要重写了,html加载完毕就给x赋值了。
如上修改-添加就完成了。

再者就是删除,删除就没什么了,直接把生成的div去掉就行了。


function deleteItem(k)
{
document.getElementById('itemBox').removeChild(document.getElementById('item'+k));
}



我们生成的html中就有删除的按钮:

<input type="button" onclick=deleteItem('"+x+"') />




wanzegui 2009-02-13
  • 打赏
  • 举报
回复
樓主這個功能給多次添加附件的功能一樣,
每點一次就可以再增一個附件!
mqc507 2009-02-13
  • 打赏
  • 举报
回复

<script type="text/javascript">
var itemCount;
function addItem()
{
var temp = document.createElement("div");
temp.id="item"+itemCount;
temp.innerHTML="<input type='text' name='itemTitle' size='60'> <input type='text' name='itemCount' value='0' size='9'> <img alt='Delete' src='Images/yichu.gif' style='cursor:pointer;' onClick='delItem("+itemCount+");'>";
document.getElementById("itemBox").appendChild(temp);
//var addStr="<div id='item"+itemCount+"'><input type='text' name='itemTitle' size='60'> <input type='text' name='itemCount' value='0' size='9'> <img alt='Delete' src='Images/yichu.gif' style='cursor:pointer;' onClick='delItem("+itemCount+");'></div>";
//document.getElementById("itemBox").insertAdjacentHTML("beforeEnd",addStr);
//document.getElementById("itemBox").innerHTML+=addStr;
itemCount++;
}

function delItem(k)
{
//document.getElementById('item'+k).removeNode(true);
document.getElementById('itemBox').removeChild(document.getElementById('item'+k));
}

function checkInfo()
{

if(document.getElementById("title").value=="")
{
alert("Title is required.");
document.getElementById("title").focus();
return false;
}
if(itemCount==0)
{
alert("Item under topic is required");
return false;
}
for(i=0;i<document.getElementsByName('itemTitle').length;i++)
{
if(document.getElementsByName('itemTitle')[i].value=="")
{
alert('Item title is required.');
document.getElementsByName('itemTitle')[i].focus();
return false;
}
if(document.getElementsByName('itemCount')[i].value=="")
{
alert('Default item count is requied.');
document.getElementsByName('itemCount')[i].focus();
return false;
}
if(!isInt(document.getElementsByName('itemCount')[i].value))
{
alert('Item count is not avlid.');
document.getElementsByName('itemCount')[i].select();
return false;
}
}

return false;
}
</script>



<div class="title_blog"><asp:Label ID="lblT" runat="server"></asp:Label></div>
<hr />


<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">

<tr>
<td class="PL" style="vertical-align:top;">Topic :</td>
<td class="PR"><input name="title" type="text" class="l" id="title" value='<%=_title%>' style="width:86%"><br /><br /></td>
</tr>
<tr>
<td class="PL">Items :</td>
<td class="PR" id="itemBox">
<div><input type="text" value="Item Title" size="60" style="text-align:center;" disabled> <input type="text" value="Item Count" size="9" style="text-align:center;" disabled> <img alt="Add" src="Images/zengjia.gif" style="cursor:pointer;" onClick="addItem();"></div>
<asp:repeater id="DBList" runat="server">
<ItemTemplate><div id='item<%#Container.ItemIndex%>'><input type='text' name='itemTitle' value='<%#Eval("Item") %>' size='60'> <input type='text' name='itemCount' value='<%#Eval("PollCount") %>' size='9'> <img alt='Delete' src='Images/yichu.gif' style='cursor:pointer;' onClick='delItem(<%#Container.ItemIndex%>);'></div></ItemTemplate>
</asp:repeater>
</td>
</tr>
<script type="text/javascript">itemCount=document.getElementById("itemBox").getElementsByTagName("div").length-1;</script>

<tr>
<td class="PH"></td>
<td class="PR"><br /><input type="submit" name="Submit" value="Save" onclick="return checkInfo();">    <input type="button" name="cancel" onClick="location.href='InstantPoll.aspx?i=B24&type=<%=type %>';" value="Cancel"></td>
</tr>
</table>


sh_suyuelin 2009-02-13
  • 打赏
  • 举报
回复
可以用隐藏域做。后台解析下就可以了。
bj890 2009-02-13
  • 打赏
  • 举报
回复
up
mqc507 2009-02-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 symbol441 的回复:]
楼主参考
原理是使用隐藏域来实现交互。
C# code<title>动态建立控件</title><script language="javascript"type="text/javascript">function addFile()
{
var controlArea=document.getElementById("FileList");

var nameStr=document.createTextNode("姓名:");
var nameObj=document.createElement("input");
nameObj.setAttribute("type","text");

[/Quote]


顶!!!!!!!!!!!中心思想都有了,自己变通一下就成了。。

请大家回答问题的时候看清楚再回答中不 ?
lianglei9810 2009-02-13
  • 打赏
  • 举报
回复
可以控制 panel 的隐藏 就成,也就是div, 控件都事先在panel中
不用动态添加控件
archu 2009-02-13
  • 打赏
  • 举报
回复
思想是这样的:
1. 在form1里面做一个hidden的域,比如叫requestStr
2. 提交表单的时候用Javascript把所有的Text1,Text2的值拼装在一起,再赋值给requestStr,以下是示例代码


var mylist = document.getElementById("form1").childNodes;
var myText = null;
for(i = 0; i < mylist.length; i++){
myText = mylist.item(i);
if(myText.nodeType == 1 && myText.id == 'Text1'){ // Is textbox
alert(myText.id + ':' + myText.value);
}
}


3. 提交表单,读取requestStr的值
chuxue1342 2009-02-13
  • 打赏
  • 举报
回复
11楼很强!不过placehodler应该不错!
Lxpd 2009-02-13
  • 打赏
  • 举报
回复
1. 文本框要用Html控件的,
可以用递归去遍历,
两组文本框定义名称特殊些,,如每组前几个字符相同,,

2 文本框用服务器控件,那就得动态添加文本框了,,,
也就是回发一下,添个文本框,回发一下,添个,
因为如果用脚本添加,回发后不用Request 接是取不到动态添的文本框的
加载更多回复(12)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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