C# 从服务器和客户端创建动态控件以从服务器访问
我正在使用C-.net framework 1.1构建asp.net web应用程序。 我正在尝试构建一个包含文本框的表,它应该从服务器和客户端构建,服务器应该访问文本框中的数据 无法上载图像,因此结构基本上是:C# 从服务器和客户端创建动态控件以从服务器访问,c#,javascript,asp.net,dynamic-controls,C#,Javascript,Asp.net,Dynamic Controls,我正在使用C-.net framework 1.1构建asp.net web应用程序。 我正在尝试构建一个包含文本框的表,它应该从服务器和客户端构建,服务器应该访问文本框中的数据 无法上载图像,因此结构基本上是: <table> <row> <Cell></Cell> <Cell>add-image</Cell> <Cell></Cell> <row> <Cell>label&
<table>
<row> <Cell></Cell> <Cell>add-image</Cell> <Cell></Cell>
<row> <Cell>label</Cell> <Cell>TextBox</Cell> <Cell>delete Image</Cell> </row>
<row> <Cell>label</Cell> <Cell>TextBox</Cell> <Cell>delete Image</Cell> </row>
</table>
<button> submit </button>
然后,当用户单击+符号时,他可以通过客户端添加新行:
function createNewSlot(e,MyArgs)
{
//add to existing table created on server
var day=MyArgs[0];
var table=document.getElementById("TimeIntervalsTable");
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
//row.insertCell(0).innerHTML=day;
//var newCell=row.insertCell(0).innerHTML='<class="dayLabels">';
var newCell=row.insertCell(0);
newCell.className="dayLabels";
newCell.innerHTML=day;
//document.getElementById("TimeIntervalsTable").rows[rowCount].cells[0].Text=day;
var timeString="From: "+MyArgs[1].toString().concat(MyArgs[2].toString())+" To: "+ MyArgs[3].toString().concat(MyArgs[4].toString());
row.insertCell(1).innerHTML='<input type="text" class="TimeSlot" runat="server" >'
document.getElementById("TimeIntervalsTable").rows[rowCount].cells[1].firstChild.value=timeString;
row.insertCell(2).innerHTML='<input type="Image" src="images/Remove-icon.png" onClick="deleteRow(this)" >';
row.insertCell(3).innerHTML='<input type="Image" src="images/edit-icon.png" >';
e.preventDefault ? e.preventDefault() : e.returnValue = false;
}
单击“提交”后,我想访问所有文本框中的数据
我知道有很多关于这个问题的数据,但是找不到我需要的。
谢谢 您最好用服务器端代码替换javascript。例如,在按钮后面创建服务器端代码以添加服务器端控件。这样,您可以在下次回发时检索这些新控件值。
客户端创建的控件永远不会成为服务器端。服务器端的控件用于生成html并显示它。当然,您可以从这些控件中检索值,但是由于在加载页面时会显示控件,因此您可以使用javascript生成html,并且在服务器端只需要处理逻辑。因此,您的问题的解决方案如下: 在服务器端实现生成控件并显示它们的代码 在服务器上实现一个API,该API可以处理您的事件,比如+符号的add命令 为客户端实现一个原型,该原型通过AJAX将命令发送到服务器,并处理服务器响应,就像在添加新项时生成html一样 在客户端创建事件处理程序,在客户端操作时调用原型所需的命令
客户端创建的控件永远不会成为服务器端。-不完全正确。客户端创建的控件将发送到服务器,服务器不会将它们识别为服务器生成的控件。它们仍将在答复中提供。我经常使用javascript来允许用户创建文件类型的额外输入,并且在服务器上处理它们没有问题。您必须手动读取服务器端的控件。您能解释一下一般的操作方法吗?目前,在调试代码时(回发到服务器时),表是空的,尽管我通过客户端添加了几行。
function createNewSlot(e,MyArgs)
{
//add to existing table created on server
var day=MyArgs[0];
var table=document.getElementById("TimeIntervalsTable");
var rowCount=table.rows.length;
var row=table.insertRow(rowCount);
//row.insertCell(0).innerHTML=day;
//var newCell=row.insertCell(0).innerHTML='<class="dayLabels">';
var newCell=row.insertCell(0);
newCell.className="dayLabels";
newCell.innerHTML=day;
//document.getElementById("TimeIntervalsTable").rows[rowCount].cells[0].Text=day;
var timeString="From: "+MyArgs[1].toString().concat(MyArgs[2].toString())+" To: "+ MyArgs[3].toString().concat(MyArgs[4].toString());
row.insertCell(1).innerHTML='<input type="text" class="TimeSlot" runat="server" >'
document.getElementById("TimeIntervalsTable").rows[rowCount].cells[1].firstChild.value=timeString;
row.insertCell(2).innerHTML='<input type="Image" src="images/Remove-icon.png" onClick="deleteRow(this)" >';
row.insertCell(3).innerHTML='<input type="Image" src="images/edit-icon.png" >';
e.preventDefault ? e.preventDefault() : e.returnValue = false;
}