从客户端获取代码隐藏中的输入文本框值

Get input textbox values in the codebehind from the client

我创建了一个 JavaScript 按钮,它将在客户端浏览器上添加 4 个文本框和一个文件上传控件。他们也可以根据需要添加任意数量的这些。

我现在的问题是提交按钮,我怎样才能遍历这些控件来获取要放入我的数据库中的值?

JavaScript

<script type="text/javascript">
var rownum = 1;

function AddRow() {

  var div = document.createElement("div")

  var divid = "dv" + rownum
  div.setAttribute("ID", divid)
  rownum++

  var txtFName = document.createElement("input")
  txtFName.setAttribute("ID", "txtFName" + rownum)
  txtFName.placeholder = "First Name";
  txtFName.style.width = "190px";
  rownum++
  var txtLName = document.createElement("input")
  txtLName.setAttribute("ID", "txtLName" + rownum)
  txtLName.placeholder = "Last Name";
  txtLName.style.width = "190px";
  rownum++
  var txtEmail = document.createElement("input")
  txtEmail.setAttribute("ID", "txtEmail" + rownum)
  txtEmail.placeholder = "Email";
  txtEmail.style.width = "289px";
  rownum++
  var txtInst = document.createElement("input")
  txtInst.setAttribute("ID", "txtAge" + rownum)
  txtInst.placeholder = "Age";
  txtInst.style.width = "100px";
  rownum++
  var _upload = document.createElement("input")
  _upload.setAttribute("type", "file")
  _upload.setAttribute("ID", "upload" + rownum)
  _upload.setAttribute("runat", "server")
  _upload.setAttribute("name", "uploads" + rownum)      
  _upload.style.width = "610px";
  rownum++

  var btnRemove = document.createElement("input")
  btnRemove.type = "button";      
  btnRemove.setAttribute("onclick", "return RemoveDv('" + divid + "');");
  btnRemove.innerText = "Remove";
  rownum++

  var _pdiv = document.getElementById("ParentDiv")

  div.appendChild(document.createElement('br'))      
  div.appendChild(txtFName)      
  div.appendChild(txtLName)      
  div.appendChild(txtEmail)
  div.appendChild(document.createElement('br'))
  div.appendChild(txtInst)
  div.appendChild(document.createElement('br'))
  div.appendChild(_upload)
  div.appendChild(document.createElement('br'))
  div.appendChild(btnRemove)
  div.appendChild(document.createElement('br'))      
  _pdiv.appendChild(div)
}

function RemoveDv(obj) {
  var p = document.getElementById("ParentDiv")
  var chld = document.getElementById(obj)
  p.removeChild(chld)
}

ASP.aspx

<table width="100%" class="pagetext_10">
<tr>
    <td colspan="10">
      <input type="button" onclick="AddRow(); 
           return false;" value="Add Employees" />&nbsp;
      <div id="ParentDiv" style="width:100%;">
      </div><br /><br />          
    </td>
   </tr>    
</table>

要遍历 Request 对象中的所有值,尝试:

foreach (string s in Request.Form.Keys )        
{       
   var formValue = Request.Form[s];      
}

只要知道字段前缀,就应该能够识别动态前缀。


如果您有固定的 12 个字段控件、3 个上传控件,而不是使用 JavaScript 创建表单字段,您可以显示/隐藏隐藏字段的服务器控件,那么这些值将可用为在页面生命周期内正常。

如果未使用的被包裹在带有display: none;的元素中,那么它们将不会被设置到服务器。


因为你只有4个动态字段,你可以直接从请求中读取它们:

var result1 = Request.Form("txtFName1");
// etc ..

如果您可以在没有这些字段的情况下提交,请检查是否为空:

if (Request.Form["txtFName1"] != null)
{
   // do stuff
}

如果按钮的数量是动态的,只要您也可以提交回该数字,您就应该能够循环。

然后您需要添加一个按钮来提交表单:

aspx:

<asp:Button id="Submit" Text="Submit" runat="server" OnClick="Submit_Click" />

隐藏代码:

public void Submit_Click(Object sender, EventArgs e)
{
    // ...do stuff...
}