c# - 按下按钮时动态添加用户控件

标签 c# javascript asp.net user-controls page-lifecycle

我的问题是我试图在单击按钮后动态地将用户控件添加到页面。听起来很简单。本质上有一个文本字段,旁边有一个添加按钮,在添加按钮上单击我想将文本框设置为只读并保留文本,将添加按钮更改为删除并添加一个新的文本字段并在下面添加按钮。实质上提供了将多个项目添加到列表中的能力。

我想出的解决方案是单击添加按钮,将文本框中的单词添加到包含用户已输入的所有单词的列表中,然后将该列表添加到 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/

相关文章:

javascript - JavaScript 上的下拉验证和合并 If 语句以及额外的验证条件?

javascript - 自定义自由文本工具

c# - ASP.NET DateTime 无法正确转换

asp.net - WCF 使用 Web 服务

c# - 其他对象上的 Unity3D IPointerDownHandler

C# - 为什么要放置一个接口(interface)泛型约束而不是仅仅传递接口(interface)类型?

c# - 单击按钮时不显示进度条

c# - 继承类的泥潭,如何让这段可维护的代码

javascript - 如何调试这个 Angular js代码?

asp.net - 在通用 http 处理程序中处理 session 超时