2011-10-20 39 views
1

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

我想出的解决方案是在添加按钮单击上,我将文本框中的单词添加到包含用户已输入的所有单词的列表,然后将该列表添加到会话中。当回发发生时,我只需从会话中获取列表并重新填充已添加的文本框。问题在于,在ASP .NET页面生命周期中,按钮单击事件实际上发生在页面加载事件之后,所以如果尝试通过在会话中抓取列表来添加文本框,它尚未填充。相反,如果我尝试在页面加载完成事件中添加文本框,那么按钮事件在点击时不会触发(不完全确定这是为什么,但很可能是因为事件在这两个事件之间的某处按钮被绑定) 。

因此,稍微摸索一下,看起来这只是ASP.NET和C#不可能的,但可能有一种方法可以用javascript来实现。任何人都有一些关于如何做到这一点的见解?我对C#非常熟悉,并且可以使用javascript,但是对于ASP .NET来说,这是相当新的,所以我们将不胜感激。

+2

你有没有想过使用AJAX工具包,并使用一个UpdatePanel让您不必将数据存储在会话做。只有一部分页面会重新加载,并且您可以将数据保留在一个区域中,而OnClick仍然会在另一个区域触发该事件。 – Genzume

+0

我有但我试图避免进入AJAX以尽可能地执行此操作,但是如果我不能很快找到一个好的方法,那么接下来我会尝试。 –

回答

0

可以完成使用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(); 
} 

一旦你的形式张贴回服务器,可以通过走Fo来遍历字段rm控件。

C#

int n=1; 
while (Request["txt" + n] != null) 
{ 
    Console.WriteLine(Request["txt" + n]); 
    n++; 
} 
+0

感谢托尼的解决方案,效果很好,应该知道比尝试去做大部分服务器端更好。 只改变我会做的是在C#代码中的while循环,因为一些文本框可能会被删除,while循环可能会提前终止。 –