服务器标记格式不正确。

3
这真是太蠢了,但它让我疯狂不已。
<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会出现问题。我想使用普通的单选按钮,并将其值绑定到我的数据源。

3个回答

5

您是否需要在服务器端访问控件?如果不需要,请去掉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:

完全测试过的简单页面示例。

Default.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"]);
    }
}

为什么将单选按钮放在标签内而不是放在旁边? - user72603
由于我们没有设置ID,因此对于标签我们没有要设置的内容。我之前有一个ID。 - user72603
<%# 和 <%= 这两个东西我也不太懂。尤其是 <%= 让我很困惑。我知道它的意思是内联,但这到底是什么意思呢? - user72603
无论如何,我还是卡住了。今天没有任何东西能让这段代码“高兴”,即使是你的建议。 - user72603
@unknown,由于它只是绑定到数据项的字符串数组,因此该对象本身就是一个字符串。在您的情况下,对象似乎是一个Action?所以您可以将其转换为Action并像在示例中一样设置字段。 - Adam
显示剩余28条评论

4

在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>

我能想到的唯一一件事就是最后一个<%#((Action)Container.DataItem).Action %>。我注意到智能感知(或者我猜是编译器)通过将“Action”类型标记为蓝色来捕捉它,但是由于它们是字符串,引号中的其余(Action)则是白色的。 - user72603
同样的 <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 %>' runat='server'><%#((Action)Container.DataItem).Action %></label> - user72603
取出引号。我不确定它们存在的意义。 - NotMe

1

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

但是我真的看不出第二个哪里错了。你也遇到了同样的“格式不正确”的错误吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接