문제

누군가 내가 이것을 어떻게 작동시킬 수 있는지 말해 줄 수 있습니까? 리피터 제어 내부의 드롭 다운 컨트롤을 구별하고 싶습니다. 나는 지금 라이프 스타일과 버퍼가 이미 쓰여진 방법에 대해 이해하지만 내 대안은 무엇입니까? 여기에 일어나는 일이 있습니다

코드 파일

    Dim repeatTimes((TotalAdInsured - 1)) As Integer

    myRepeater.DataSource = repeatTimes
    myRepeater.DataBind()

aspfile

<asp:Repeater ID="myRepeater" runat="server">
    <ItemTemplate>
         <asp:DropDownList ID="AdTitle<%# Container.ItemIndex %>" runat="server">
             <asp:ListItem Selected="True" Value="" Text=""/>
             <asp:ListItem Selected="False" Value="Miss" Text="Miss"/>
             <asp:ListItem Selected="False" Value="Ms" Text="Ms"/>
             <asp:ListItem Selected="False" Value="Mrs" Text="Mrs"/>
             <asp:ListItem Selected="False" Value="Mr" Text="Mr"/>
             <asp:ListItem Selected="False" Value="Other" Text="Other"/>
         </asp:DropDownList>
    </ItemTemplate>
</asp:Repeater>

이 오류를 반환합니다

파서 오류 메시지 : 'adtitle < %# container.itemindex %>'는 유효한 식별자가 아닙니다.

도움이 되었습니까?

해결책

리피터 제어 내부의 드롭 다운 컨트롤을 구별하고 싶습니다.

당신은 할 필요가 없습니다. 다음은 도움이 될 수있는 몇 가지 샘플 코드입니다.

마크 업 :

<%@ 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">
    <div>
        <asp:Label runat="server" ID="lblMsg" Text="Click a button" />
        <hr />
        <asp:Repeater runat="server" ID="rptAwesome" onitemcommand="rptAwesome_ItemCommand"
            >
            <ItemTemplate>
                <asp:Button runat="server" ID="btnAwesome"
                    Text='<%# "Button #" + Container.ItemIndex %>'
                    CommandArgument='<%# Container.DataItem %>'/><br />
            </ItemTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

CodeBehind :

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            var x = new int[] { 1, 2, 3, 4, 5 };
            rptAwesome.DataSource = x;
            rptAwesome.DataBind();
        }
    }
    protected void rptAwesome_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        Button btnAwesome = (Button)e.CommandSource;
        lblMsg.Text = string.Format("btnAwesome.ID = {0}, e.CommandArgument = {1}", btnAwesome.ID, e.CommandArgument);
    }
}

다른 팁

그런 마크 업을 통해 리피터 내부에서 고유 한 ID를 만들 수 없습니다. 그러나 사용하여 CodeBehind의 드롭 다운을 검색 할 수 있습니다. FindControl 리피터에서.

Dim adTitle As DropDownList = MyRepeater.FindControl("AdTitle")
If (Not adTitle Is Nothing) Then
  ''Do something here
End If

좋아 ... 간단히 말해서 당신은 현재하고있는 방식으로 당신이하려는 일을 할 수 없습니다.

컨트롤의 ID 속성은 태그의 ID 속성과 간단한 값을 사용 하여만 설정할 수 있습니다. 예시: <asp:Button runat="server" id="Button1" />

나는 당신이 무엇을하려고하는지 알 수 있지만 왜 그런지 정말로 이해하지 못합니다 ...

Repeater 컨트롤에는 데이터 소스의 항목 당 1 개의 항목이 포함되므로 DropdownList에 전화하는 것이 좋습니다. ID="AdTitle" 그것은 다를 것입니다 'AdTitle' 다음 행의 하나에서.

서버 측면을 되 찾으려면 리피터의 항목을 반복하고 & FindControl("AdTitle") 해당 항목의 특정 드롭 다운 목록을 얻으려면

IDS가 증가 해야하는 경우,이 프로그램을 프로그래밍 방식으로 수행해야합니다 (아마도 ItemDataBound 이벤트로 드롭 다운 목록을 작성하고 항목 판에 추가하십시오.

BC의 답변 확장 : 최근에 동일한 문제를 겪었지만 확인란이 있었음에도 불구하고 선택을 지속 할 때 사용한 ID를 설정해야했습니다. 약간 어리석지 만 항목 데이터가 묶일 때 그렇게했습니다.

마크 업은 다음과 같습니다.

<asp:Repeater ID="Repeater1" runat="server" >
<HeaderTemplate>Header<br /><br /></HeaderTemplate>
<ItemTemplate>
    <asp:CheckBox ID="cb" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>' />
     ...other controls removed for brevity
</ItemTemplate>
<FooterTemplate>
    <asp:Button ID="Button1" runat="server" OnClick="Submit" Text="Submit" />
</FooterTemplate>
</asp:Repeater>

나는이 수업의 컬렉션을 설정하고 묶었 다

public class mst
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Number { get; set; }
    public bool NumberRequired { get; set; }
}

Page_load에서 필요한 것을 수행하십시오

        Repeater1.ItemDataBound += new RepeaterItemEventHandler(Repeater1_ItemDataBound);
        Repeater1.DataSource = listOfMsts;
        Repeater1.DataBind();

그 뒤에, 이것은 내가 ID를 설정 한 곳입니다.

    void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var mst = (mst)e.Item.DataItem;
            ((CheckBox)e.Item.FindControl("cb")).ID = mst.Id.ToString();
        }
    }

따라서 제출 버튼이 히트되면 확인 된 사람들의 ID를 가져 와서 저장할 수 있습니다.

  protected void Submit(object sender, EventArgs e)
    {
    foreach (var item in Repeater1.Items)
        {
            var checkboxes = ((RepeaterItem)item).Controls.OfType<CheckBox>().ToList();
            if (checkboxes[0].Checked)
            {
                Save(checkboxes[0].ID);
                ....other stuff
            }
        }
    }

리피터에 이벤트 핸들러를 추가 할 수 있으며 항목 컨테이너에 대한 참조를 사용하여 핸들러 내에서 컨트롤을 만들 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top