内联代码被视为ASPX代码

时间:2014-12-05 12:01:19

标签: c# asp.net

我有一个名为“txtNewSubComment”的asp TextBox控件。但是,因为我动态生成多个相同的文本框,所以我需要一种方法来保持它们的唯一性,以便我可以引用它们。我正在尝试执行以下操作:

<asp:TextBox ID="txtNewSubComment_<%=comment.Id %>" />(不是整个代码块,但你明白了)

comment.Id将返回与该TextBox控件相关的唯一int。我的问题是aspx似乎没有将内联代码(&lt; %%&gt;)作为内联代码读取,而是将其作为aspx读取。因此,不是将其作为txtNewSubComment_1在html中呈现(如果我设法进入该阶段而没有错误妨碍),则呈现为txtNewSubComment_<%=comment.Id%>

尝试为按钮传递CommandArgument时遇到问题

文本框是通过aspx标记中的以下代码生成的:

<%  Site.BO.Comment[] commentList = db.GetAllCommentsForImage(CurrentImage.Id);
                if (commentList.Count() > 0)
                {
                    foreach (Site.BO.Comment comment in commentList.OrderByDescending(x => x.LastUpdated))
                    {
                        Site.BO.Profile commenterProfile = db.ProfileGet(comment.User.Id); %>
            <asp:TextBox ID="txtNewSubComment_<%=comment.Id %>" runat="server" TextMode="MultiLine"></asp:TextBox>

<% } } %>

2 个答案:

答案 0 :(得分:0)

在ASP.Net 4.0中,Microsoft引入了控制ID生成方式的能力:

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode%28v=vs.110%29.aspx

您正在查看ClientIDMode设置为Predictable

控件本身应包含runat="server"属性

<asp:Repeater ID="rptMeetings" DataSourceID="CommentsList" runat="server">
    <ItemTemplate>
        <asp:TextBox ID="txtNewSubComment_<%# this.Eval("Id") %>" runat="server" TextMode="MultiLine" ClientIDMode="Predictable"/>
    </ItemTemplate>
</asp:Repeater>

答案 1 :(得分:-1)

如果您在后面的代码中创建文本框,则不希望字符串看起来像这样:

<asp:TextBox ID="txtNewSubComment_<%=comment.Id %>" />

你会想要这样的东西:

Dim _value = 1
Dim _textBoxString2 As String = "<asp:TextBox ID=""" + _value + """/>"

如果没有看到您在何处/如何创建文本框,将很难找到解决方案。你可能也想发布它。