1

我是一个绝对的 javascript 菜鸟,并且正在使用 ASP.net,在我的 aspx.cs 文件后面的代码中,我使用 html 标记声明了 Web 文档的主体,如下所示...

public void CreateForm(string passengerType, int passengerCount)
    {
        for (int i = 1; i <= passengerCount; i++)
        {
            Response.Write("<table id=NameBirthTable" + passengerType + i + ">");
            Response.Write("<tr>"); 
               ...
            Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i                + "type=text /></td>");
                ...
        }
    }

当我尝试调用 id="MiddleName[passengerType][i]" 中的元素 ID 时,我找不到它,我需要获取该文本框的值并将其传递到另一个页面,有人建议我使用 javascript 并尝试将这些元素存储在隐藏元素中并将其添加到用 javascript 声明的数组中,我没有得到他所说的任何东西,还有其他建议吗?

4

5 回答 5

0

检查生成文档的来源,以查看生成的 id 作为代码的输出。请记住,asp.net 控件使用与服务器端不同的 id 呈现 ID。要在您的 javascript 函数中获取它,您需要执行以下操作:

function getElement(){
    var myEl = document.getElementByID('<%=ControlID.ClientID%>')
}

ControlID您控制的服务器端 ID在哪里。

但是,在您的特定情况下,ControlID 可能不可用,因此可能需要在页面类中创建一个包含您添加的控件的属性 - 例如:

class MyPage:Page{
    TextBox TextBoxName {get;set;}

    public void CreateForm(string passengerType, int passengerCount)
    {
        TextBoxName = new TextBox();
        this.Controls.Add(TextBoxName);
    }

}

我知道此代码可能与您当前的实现不匹配,但通常它应该以这种方式工作。

于 2013-09-12T10:10:39.773 回答
0

试试下面

public void CreateForm(string passengerType, int passengerCount)
{
    StringBuilder sb = new StringBuilder();
    sb.AppendLine("<table id='NameBirthTable" + passengerType  + "'>");
    for (int i = 1; i <= passengerCount; i++)
    {
        sb.AppendLine("<tr>");
        sb.AppendLine("<td colspan='2'><input id='MiddleName" + passengerType + i + "' type='text' /></td>");
    }
    sb.AppendLine("</table>");
    Response.Write(sb.ToString());
}
于 2013-09-12T10:11:30.837 回答
0

在服务器端,您可以创建所有已创建 ID 的列表,并将它们作为值输出到隐藏字段。

public void CreateForm(string passengerType, int passengerCount)
{
    /* List to hold id values */
    List<string> ids = new List<string>();

    for (int i = 1; i <= passengerCount; i++)
    {
        Response.Write("<table id=NameBirthTable" + passengerType + i + ">");
        Response.Write("<tr>"); 
        //   ...
        Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i+ "type=text /></td>");
        //    ...

        /* Add newly created input id to list */
        ids.Add("MiddleName" + passengerType +i);
    }

    /* Output the ids collection to hidden field value */
    Response.Write("<input type='hidden' id='hiddenElement' value='" + string.Join(",", ids.ToArray()) + "'></input>");
}

在客户端javascript 上,您可以从隐藏元素中获取所有这些 id,遍历它们并获取所有创建的输入元素

/* Get all ids from hidden element */
var ids = document.getElementById('hiddenElement').value.split(',');
/* Loop through all ids */
for (var i = 0; i < ids.length; i++) {
    var element = document.getElementById(ids[0]);
    // do something
}
于 2013-09-12T11:05:32.190 回答
0

也许:

Response.Write("<td colspan=2><input id='MiddleName" + passengerType + i + "' type=text /></td>");
于 2013-09-12T10:01:43.747 回答
0

如果您在页面上查看源代码,您可能会看到:

<td colspan=2><input id=MiddleNameXYZ1>
<td colspan=2><input id=MiddleNameXYZ2>
<td colspan=2><input id=MiddleNameXYZ3>

换句话说,您的编码没有按照您认为的格式进行格式化。

于 2013-09-12T10:01:58.237 回答