【问题标题】:Server Tag is not well formed服务器标签格式不正确
【发布时间】:2010-10-15 09:15:11
【问题描述】:

这真是太愚蠢了,但让我发疯了。

<input type="radio" name="OptGroup" id="<%#"rbEmail" + ((Action)Container.DataItem).ID %>" value="<%#((Action)Container.DataItem).ID %>" runat="server" /><label for="<%#"rbEmail" + ((Action)Container.DataItem).ID %>"><%#((Action)Container.DataItem).Action %></label>

我在这里做错了什么!我也试过:

<input type="radio" name="OptGroup" id='<%#"rbEmail" + ((Action)Container.DataItem).ID %>' value='<%#((Action)Container.DataItem).ID %>' runat="server" /><label for='<%#"rbEmail" + ((Action)Container.DataItem).ID %>'><%#((Action)Container.DataItem).Action %></label>

<input type="radio" name="OptGroup" id="<%#'rbEmail' + ((Action)Container.DataItem).ID %>" value="<%#((Action)Container.DataItem).ID %>" runat="server" /><label for="<%#'rbEmail' + ((Action)Container.DataItem).ID %>"><%#((Action)Container.DataItem).Action %></label>

我特别不想使用 asp.net 单选按钮,因为它在中继器内创建的 GroupName 存在问题。我想使用一个单选按钮并将其值绑定到我的数据源。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您需要访问控制服务器端吗?如果没有,请去掉 runat="server",您不能将数据绑定到服务器控件的 ID 属性。不确定这是否是问题所在,因为这会给您带来不同的错误

    编辑:

    这样的东西应该适合你的目的..

    <asp:Repeater runat="server">
        <ItemTemplate>
            <label><input type="radio" name="rbEmail" value='<%# ((Action)Container.DataItem).ID %>' /><%# ((Action)Container.DataItem).Action %></label>
        </ItemTemplate>
    </asp:Repeater>
    

    然后在回发中,可以从Request.Form["rbEmail"]中获取值

    编辑2:

    经过全面测试的简单页面示例..

    默认.aspx

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Untitled Page</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <asp:Repeater ID="Repeater1" runat="server">
                <ItemTemplate>
                    <label><input type="radio" name="rbEmail" value='<%# Container.DataItem %>' /><%# Container.DataItem %></label>
                </ItemTemplate>
            </asp:Repeater>
            <asp:Button ID="submit" runat="server" OnClick="submit_Click" Text="submit" />
        </form>
    </body>
    </html>
    

    Default.aspx.cs

    using System;
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.DataSource = new string[] { "Hello", "World" };
            Repeater1.DataBind();
        }
    
        protected void submit_Click(object sender, EventArgs e)
        {
            Response.Write(Request.Form["rbEmail"]);
        }
    }
    

    【讨论】:

    • 我愿意。这将在中继器内。然后服务器端我将访问选定的值
    • 我真的不明白
    • 为什么将单选按钮放在标签内而不是放在旁边?
    • @unknown,你仍然需要对我在这里遗漏的中继器进行数据绑定。
    • @unknown,由于我们没有设置 id,我们没有为标签设置任何内容。如果您仍想通过单击文本来选择单选按钮,则必须将单选按钮放在标签内
    【解决方案2】:

    在您的 html 中使用单引号。例如:

    <input type='radio' name='OptGroup' id='<%#"rbEmail" + ((Action)Container.DataItem).ID %>' value='<%#((Action)Container.DataItem).ID %>' runat='server' /><label for='<%#"rbEmail" + ((Action)Container.DataItem).ID %>'><%#((Action)Container.DataItem).Action %></label>
    

    【讨论】:

    • 我唯一能想到的是最后一个 我注意到智能感知(或者我猜的编译器)通过将其着色为蓝色,但引号中的其余(操作)为白色,因为它们是字符串
    • 相同
    • 去掉 " 引号。我不确定它们是干什么用的。
    【解决方案3】:

    第一个是错误的,因为正如您所怀疑的那样,属性值的双引号和字符串文字周围的双引号会使解析器感到困惑。

    不过,我这辈子都看不出第二个有什么问题。您是否也遇到与该错误相同的“格式不正确”错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多