2009-07-15 4 views
1

웹 호스팅 카트 프로세스에 연결된 모듈을 만들려고 여기 있습니다.리터럴 및 ViewState 관련 문제

첫 번째 단계에는 '추가'버튼이있는 텍스트 입력란이 있어야합니다. 이 버튼은 도메인의 가용성을 확인하고 목록에 추가합니다.

기본적으로 검증 된 도메인 목록을 표시하고 라디오 박스로 적절한 조치를 취하는 것입니다 (무료 인 경우 등록, 그렇지 않으면 도메인을 직접 지정).

기본적으로 사용 가능성을 확인한 다음 자리 표시 자에 리터럴 컨트롤을 추가합니다.

문제는 viewstate입니다 (앞뒤로 건너 뛰어 도메인과 관련된 선택을 잃을 때).

html로 : 뒤에

(...) 
     <asp:MultiView ID="mvFlow" runat="server" ActiveViewIndex="0"> 
      <asp:View ID="vDomain" runat="server" onactivate="vDomain_Activate"> 

       <asp:TextBox ID="txtDomain" runat="server" style="margin-bottom: 0px" 
        Width="254px"></asp:TextBox> 
        &nbsp;<asp:Button ID="domainAdd" runat="server" onclick="domainAdd_Click" 
        style="height: 26px" Text="Ajouter" /> 
       &nbsp;<br /> 
       <br /> 
       <asp:PlaceHolder ID="phDomainResults" runat="server"></asp:PlaceHolder> 
       <br /> 
       <br /> 
       <asp:LinkButton ID="lbDomainSkip" runat="server" onclick="lbDomainSkip_Click">Prochaine 
       étape »</asp:LinkButton> 

      </asp:View> 
(...) 

는 기본적으로 같은 뭔가 :

lt.Text =

    "<dl>" + 
         "<dt><strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span></dt>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='register' /> Register</dd>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='transfert' disabled='disabled' /> Transfert</dd>" + 
         "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='point' /> Point</dd>" + 
        "</dl>"; 

일을 더 논리적이고 쉽게 할 수있을해야합니까? 당신이 올바른지 뷰 상태를 사용할 필요가, 당신은 문자를 사용할 수없는 경우

LiteralControl lt = new LiteralControl(); 
RadioButtonList rl = new RadioButtonList(); 

lt.Text = "<strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span>"; 
rl.Items.Add(new ListItem { Enabled = true, Selected = true, Text = "Enregistrement", Value = "register" }); 
rl.Items.Add(new ListItem { Enabled = false, Selected = false, Text = "Transfert", Value = "transfert" }); 
rl.Items.Add(new ListItem { Enabled = true, Selected = false, Text = "Pointer moi même", Value = "point" }); 
//phDomainResults is a PlaceHolder in the page 
phDomainResults.Controls.Add(lt); 
phDomainResults.Controls.Add(rl); 

답변

0

... 더 작동하지 않습니다

에 따라 제안 내가 이런 짓을. (또는 더 구체적으로는하지만 꽤 성가신 될 수 있습니다. 당신은 아마 즉석에서 ASP를 RadioButtonList 요소를 생성하고 장소 홀더에 그 추가해야

. 귀하의 페이지 viewstate가에 RadioButtonList을 기억 할 수있을 것입니다.

+0

시도했는데 List 자체를 저장하지 않는 것 같습니다. – Erick

0

ViewState 컬렉션의 관련 정보를 코드 뒤에 저장하고 모든 페이지에서 자리 표시 자 값을 지우고 지금 그대로 리터럴을 추가하고 다시 추가합니다. 이렇게하면 걱정할 필요가 없습니다. ASP.Net이 저장할지 여부를 묻는 메시지가 표시됩니다.

1

ASP.NET은 뷰 상태를 잘 보존합니다. 리터럴의 내용을 그대로 유지합니다. 리터럴의 내용은 사용자가 해당 버튼을 클릭했을 때 수행 한 작업이 아니라 마크 업 (라디오 버튼이있는 <dl>) 일뿐입니다.

동적으로 라디오 단추를 HTML에 추가하기 때문에 ASP.NET 페이지에서 해당 항목을 "알지 못합니다."

리터럴 컨트롤에서 라디오 단추를 누르는 대신 RadioButtonList를 대신 사용해보십시오.

+0

작동하지 않는 것처럼 보입니다. 다시 돌아 가면 RadioButtonList가 사라집니다. – Erick