我的问题是我试图在单击按钮后动态地将用户控件添加到页面。听起来很简单。本质上有一个文本字段,旁边有一个添加按钮,在添加按钮上单击我想将文本框设置为只读并保留文本,将添加按钮更改为删除并添加一个新的文本字段并在下面添加按钮。实质上提供了将多个项目添加到列表中的能力。
我想出的解决方案是单击添加按钮,将文本框中的单词添加到包含用户已输入的所有单词的列表中,然后将该列表添加到 session 中。当回发发生时,我只需从 session 中获取列表并重新填充已添加的文本框。问题在于,在 ASP .NET 页面生命周期中,按钮单击事件实际上发生在页面加载事件之后,因此如果我尝试通过抓取 session 中的列表来添加文本框,则该文本框尚未填充。相反,如果我尝试在页面加载完成事件中添加文本框,则单击按钮事件时不会触发(不完全确定这是为什么,但可能是因为事件绑定(bind)到这两个事件之间的某个按钮) .
经过一番研究后,看起来仅使用 ASP.NET 和 C# 是不可能的,但可能有一种方法可以使用 javascript 来做到这一点。有人对如何做到这一点有一些见解吗?我非常熟悉 C#,也可以使用 javascript,但对 ASP .NET 还很陌生,因此我们将不胜感激。
最佳答案
您可以使用 JQuery 来完成您的功能,如 jsFiddle 所示。
HTML
<div id="myDiv">
<div id="item1">
<input id="txt1" name="txt1" type="text"></input><input id="cmdAdd1" type="button" value="Add"></input>
</div>
</div>
Javascript
var itemCount = 1;
$('#cmdAdd1').click(function(){addNewItem();});
function addNewItem(){
var thisItem = itemCount;
// Make last text box readonly
$('#txt' + itemCount).attr('readonly', 'readonly');
// Change button to Remove button
$('#cmdAdd' + itemCount).attr('value', 'Remove');
$('#cmdAdd' + itemCount).unbind();
$('#cmdAdd' + itemCount).click(function(){removeItem(thisItem );});
// Add new line with text field and button
itemCount++;
var newItem = '<div id="item' + itemCount + '">'
newItem += '<input id="txt' + itemCount + '" name="txt' + itemCount + '" type="text"></input>';
newItem += '<input id="cmdAdd' + itemCount + '" type="button" value="Add"></input>';
newItem += "</div>";
$('#myDiv').append(newItem);
$('#cmdAdd' + itemCount).click(function(){addNewItem();});
}
function removeItem(i){
$('#item' + i).remove();
}
一旦您的表单发送回服务器,您就可以通过遍历表单控件来遍历字段。
C#
int n=1;
while (Request["txt" + n] != null)
{
Console.WriteLine(Request["txt" + n]);
n++;
}
关于c# - 按下按钮时动态添加用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7843051/