2009-03-25 2 views
1

Это так проклятый глупо, но с ума сошел с ума.Тег сервера не очень хорошо сформирован

<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 радиокнопку из-за проблемы с ИмяГруппой он создает в то время как внутри ретранслятора. Я хочу использовать пустой переключатель и привязать его значения к моему источнику данных.

ответ

3

Нужно ли вам получить доступ к серверу управления? Если нет, отпустите runat = "server", вы не сможете привязать его к свойству ID для серверного элемента управления. Не уверен, что если тот проблему, так как это должно дать вам различные ошибки

EDIT:

Что-то, как это должно удовлетворить ваши цели ..

<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"]

EDIT2:

Полностью протестирован простой пример страницы ..

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"]); 
    } 
} 
+0

я. это будет внутри ретранслятора. Тогда на стороне сервера я выберу выбранное значение – user72603

+0

@unknown, проверьте правильность и посмотрим, поможет ли это – Adam

+0

. Я серьезно не получаю <# vs <= Я знаю, что он встроен против любого, но я не получаю это – user72603

0

Первый ошибочный, поскольку, как вы подозревали, двойные кавычки для значения атрибута и двойные кавычки вокруг строкового литерала путают парсер.

Я не могу для жизни меня видеть, что не так со вторым. Получаете ли вы ту же «неплохую» ошибку с этим?

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> 
+0

Единственное, что я могу думать о последней <% # ((Action) Container.DataItem) .action%> I заметил, что intellisense (или компилятор, я думаю) подбирает тип «Действие», окрашивая его в синий, но остальные (Action), которые находятся в кавычках, являются белыми, так как они являются строками – user72603

+0

одинаковый user72603

+0

собирается вытащить мои волосы этот пункт – user72603