当前位置:编程学习 > C#/ASP.NET >>

动态给页面添加控件的问题

先贴代码。

                    <div class="nav">
                        <ul id="testUL" runat="server">
                            <%--<asp:Literal ID="Literal1" runat="server"></asp:Literal>--%>
                        </ul>
                    </div>



                        string[] ExamsID = ExamsInfo.ToString().Split(',');
                        foreach (string ID in ExamsID)
                        {
                            Literal newLit = new Literal();
                            newLit.Text = ExamansBll.SelectExamsInfo(ID);
                            testUL.Controls[1].Controls.Add(newLit);
                        }


思路应该是这样的,

在后台拼了一条字符串,包含复选框,单条赋值给已经添加的Literal没有问题,

可如果我的字符串,条数不固定,那么<ul></ul>下就不可以写Literal控件,

------------------------------------------------------------------------------

而是要C#动态添加,以上C#代码报错。

“System.Web.UI.WebControls.Literal”不允许使用子控件。


拼接出来的单条字符串是这样:

<li><font color='#000' size='4'>民法测试.</font><br /><input type='checkbox' value='1' />A-处罚 <input type='checkbox' value='1' />B-处罚 <input type='checkbox' value='1' />C-处罚 <input type='checkbox' value='1' />D-处罚 </li>


可我要的是多条,条数不固定,如何把拼接出来的多条字符串动态添加到UL下。
求高手解决。 --------------------编程问答-------------------- 那你别用Literal了,他不允许有子控件,你用一个可以容纳子控件的容器,在它上面添加,比如panel --------------------编程问答--------------------

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<script type="text/javascript">
function contactlist(){
var table = document.getElementById("contactTable");
var tr = table.insertRow(table.rows.length);//添加一行
tr.align="center";
tr.bgcolor="#F3F4F3";
tr.height="23";

//添加五列
var td0 = tr.insertCell(0);
td0.width="20%";
var td1 = tr.insertCell(1);
td1.width="20%";
var td2 = tr.insertCell(2);
td2.width="8%";
var td3 = tr.insertCell(3);
td3.width="30%";
var td4 = tr.insertCell(4);
td4.width="20%";

//设置列内容
td0.innerHTML = "";
td1.innerHTML = "<input type='file' id='dataAudio' name='dataAudio'/><input type='hidden' name='dataAudios'/><input type='hidden' name='audioOldName'/>";
td2.innerHTML = "<input type='text' name='playDateTime' id='playDateTime' onkeyup='validateNumber(this);' size='5' maxlength='3' style='color: red' />";
td3.innerHTML = "<input type='text' name='content' id='content' size='35' maxlength='300'/>";
td4.innerHTML = "<input type='button' value='删除' onclick='removeRow(this.parentNode.parentNode)'/>";

}

function removeRow(r)
{
    var root = r.parentNode;
    var allRows = root.getElementsByTagName('tr');
    if(allRows.length > 3){
        root.removeChild(r);
    }else{
     alert("不能删除改行!");
    }
}
</script >
</head>


<body>

<table id="contactTable" width="98%" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#D9D9D9"> 
    <tr bgcolor="#F3F4F3" align="center" height="23">
       <td colspan="5" align="left"><input type="button" value="添加帧" class="button" onclick="return contactlist();"/></td>
    </tr>
    <tr bgcolor="#F3F4F3" align="center" height="23">
       <td width="20%">上传图片</td>
       <td width="20%">上传声音</td>
       <td width="8%">播放时间</td>
       <td width="30%">内    容</td>
       <td width="20%">操作</td>
    </tr>
</table>

</body>
</html>
--------------------编程问答--------------------
引用 2 楼  的回复:
C# code

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<script type="text/javascript">
function contactlist(){
        var table = document……


可这个是后台做的 --------------------编程问答--------------------
引用 1 楼  的回复:
那你别用Literal了,他不允许有子控件,你用一个可以容纳子控件的容器,在它上面添加,比如panel


您的意思,把控件换成panel,在Panel下面动态添加Literal吗? --------------------编程问答-------------------- 直接这样就可以了啊。。

                Literal li = new Literal();
                li.Mode= LiteralMode.PassThrough; //不修改文本内容
                li.Text="<li><input type='checkbox' value='1' />民法测试" + i + "</li>";
                testUL.Controls.Add(li);


testUL.Controls[1].Controls.Add(newLit);
这里两个Controls就自然跑到li里面去了 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼  的回复:
直接这样就可以了啊。。
C# code

                Literal li = new Literal();
                li.Mode= LiteralMode.PassThrough; //不修改文本内容
                li.Text="<li><input type='checkbox' value='1' />民法测试" + ……


果然可以了。谢谢。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,