문제

다음과 같이 정의 된 ASPX-PAGE에 대한 리피터 컨트롤이 있습니다.

<asp:Repeater ID="answerVariantRepeater" runat="server"
    onitemdatabound="answerVariantRepeater_ItemDataBound">
    <ItemTemplate>
        <asp:RadioButton ID="answerVariantRadioButton" runat="server"
            GroupName="answerVariants" 
            Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"/>
    </ItemTemplate>
</asp:Repeater>

시간에 하나의 라디오 버튼 만 선택할 수 있도록 트릭 양식을 사용했습니다. 이 기사.

그러나 이제 양식이 제출되면 어떤 라디오 버튼을 확인하고 싶습니다.

나는 이것을 할 수있다 :

RadioButton checkedButton = null;

foreach (RepeaterItem item in answerVariantRepeater.Items)
{
    RadioButton control=(RadioButton)item.FindControl("answerVariantRadioButton");
    if (control.Checked)
    {
        checkedButton = control;
        break;
    }
}

그러나 어떻게 든 단순화 될 수 있기를 바랍니다 (아마도 LINQ를 통해 객체로).

도움이 되었습니까?

해결책

클라이언트의 라디오 버튼 클릭 이벤트를 이미 처리하기 위해 이미 JavaScript를 사용하고 있으므로 동시에 선택한 값으로 숨겨진 필드를 업데이트 할 수 있습니다.

서버 코드는 숨겨진 필드에서 선택한 값에 액세스합니다.

다른 팁

항상 사용할 수 있습니다 Request.Form 제출 된 라디오 버튼을 얻으려면 :

var value = Request.Form["answerVariants"];

제출 된 값은 기본값이 <asp:RadioButton /> 선택되었지만 공식적으로는 아니지만 항상 값 속성을 추가 할 수 있습니다. <asp:RadioButton /> 재산 - 그리고 이것은 제출 된 값입니다.

<asp:RadioButton ID="answerVariantRadioButton" runat="server"
    GroupName="answerVariants" 
    Text='<%# DataBinder.Eval(Container.DataItem, "Text")%>'"
    value='<%# DataBinder.Eval(Container.DataItem, "SomethingToUseAsTheValue")%>' />

LINQ를 사용하여 여기에서 객체를 사용할 수있는 유일한 것은 Foreach 루프 내에서 조건을 가져 와서 WHERE 절으로 옮기는 것입니다.

RadioButton checked = 
    (from item in answerVariantRepeater.Items
    let radioButton = (RadioButton)item.FindControl("answerVariantRadioButton")
    where radioButton.Checked
    select radioButton).FirstOrDefault();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top