대시 보드 페이지에서 여러 컨트롤을 동적으로로드합니다. 컨트롤은 항상로드되어야하므로 if (!Page.IsPostBack)
코드가 없습니다. 그러나 문제는 코드 숨김에서 우리는 Request.Form.GetValues
을 사용하고 특정 드롭 다운 필드의 값은 항상 null입니다 (아마도 컨트롤이 다시 게시되고 포스트 백에 다시로드되기 때문에) 나중에 페이지에서 오류가 트리거됩니다 이 드롭 다운에서 값을 기대합니다. Javascript를 통해 동적으로 페이지를 추가 할 수 있기 때문에 Request.Form.GetValues를 사용해야한다.동적으로 컨트롤 및 포스트 백로드
포스트 백을 확인하면 컨트롤의 버튼 이벤트가 전혀 실행되지 않지만 대신 대시 보드 페이지가 다시로드되고 컨트롤이로드되지 않습니다 (즉, 페이지가 비어 있음).
이 문제를 해결하려면 어떻게합니까? 항상 동적으로 컨트롤을로드해야하지만 Request.Form.GetValues를 통해 값을 검색해야합니다. 어떤 제안?
편집 여기
코드가 어떻게 표시되는지를 보여줍니다 대략 같은 :
(클라이언트 측 HTML)
는 는 는ibtnGetQuote_Click
에
(서버 측
<table>
<tr>
<td align="center">
<select id="Class1" class="txtboxcomm" name="Class1" runat="server" />
<a href="javascript:classFinder('1')"> Look Up</a>
</td>
</tr>
</table>
<div id="action">
<asp:LinkButton ID="ibtnGetQuote" runat="server" OnClick="ibtnGetQuote_Click" CssClass="getQuote" AccessKey="G">Get Quote</asp:LinkButton>
</div>
-이 실제로 루프 사용자가 여러 행을 추가 할 수 있으므로 정확한 행을 찾기 위해 "클래스"라는 단어에 "i"가 추가됩니다.
IList<string> classes = this.GetFormValues("Class1");
// This will return null all the time...
private IList<string> GetFormValues(string clientID)
{
String[] values;
values = Request.Form.GetValues(clientID);
if (values == null)
{
Control ctl = FindControl(clientID); // uses built-in FindControl method
values = Request.Form.GetValues(ctl.ClientID);
}
return values;
}
"ctl00 $ xx $ xx"원본 코드가 하드 코드되었지만 컨트롤이로드 될 수도 있고로드되지 않을 수도 있으므로 컨트롤이 가져올 이름을 보장 할 수 없습니다. 실제로 첫 번째 컨트롤 만 서버 컨트롤이므로 나머지는 표준 HTML 컨트롤이므로 "ClientID"가 없으므로 모든 시나리오에서 작동하는지 확실하지 않습니다.
당신의 표현은 많은 컨트롤 중 하나에서만이 문제가 발생한다는 인상을줍니다. 맞습니까? 아니면 모든 동적 컨트롤에 이러한 문제가 있습니까? –
null 값까지는 첫 번째 행이 실제 서버 컨트롤 (예 : ASP.NET ctl00_ $ Stuff_ $ Stuff 형식 이름 지정)이고 Request.Form .GetValues는 해당 컨트롤에 대해 null을 반환합니다. –