2012-12-10 3 views
2

두 단추가 내 GridView 컨트롤의 열에 있습니다. onclick 이벤트가 서버 컨트롤을 사용하여 작업 (자바 스크립트 호출 내부 #Eval 문에주의)하지 않습니다 - 버튼 :GridView의 단추 텍스트 변경 - (GridView ItemTemplate 단추가 DataBoundLiteralControl로 렌더링 됨)

<asp:TemplateField ItemStyle-CssClass="minPadding"> 
    <ItemTemplate> 
     <input id="btnDateRange" type="button" value="Date Range" class="JQDatePicker SmallText FloatRight WrapButtonText" onclick="javascript:document.getElementById('hdnImpressionTagID').value = '<%# Eval("ImpressionTagID") %>'"/> 
     <asp:Button ID="btnShowImpressions" CommandArgument='<%# Eval("ImpressionTagID") %>' CommandName="ShowImpressions" Text="Total Impressions" runat="server" UseSubmitBehavior="false" CssClass="SmallText FloatLeft WrapButtonText" Width="80px" /> 
    </ItemTemplate> 
</asp:TemplateField> 

이유는 첫 번째 단추는 내가 ASP를 사용하려고하면 때문에 HTML 컨트롤입니다 '서버 태그의 형식이 올바르지 않습니다.'

이 코드의 텍스트를 내 코드에서 변경하고 싶습니다.

나는 올바른 행 인덱스를 찾아 나는 그들이 셀에 알고 (전 C#을 사용하고 있습니다) 5.

내가 ASP를 설정할 수 있습니다

: 그래서 같은 버튼 컨트롤의 텍스트를 ...

Button btn = ((Button)gridImpressionTags.Rows[i].Cells[5].FindControl("btnDateRange")); btn.Text = "This Text has changed!";

문제는 다음과 같습니다. & 코드에서 참조 할 때 웹 컨트롤 btnDateRangeDataBoundLiteralControl으로 표시됩니다. 버튼으로 전송할 수 없습니다.

저는 이것을 리터럴 형식으로 변환 할 수도 없습니다. Unable to cast object of type 'System.Web.UI.DataBoundLiteralControl' to type 'System.Web.UI.WebControls.Literal'.

그리고로 캐스팅 DataBoundLiteralControl가 작동하지만 다음 날 텍스트를 변경하는 것을 허용하지 않습니다 System.Web.UI.DataBoundLiteralControl.Text' cannot be assigned to -- it is read only

내 HTML 버튼이 DataBoundLiteralControl로 렌더링하는 이유 사람이 알고 있나요? 나에게 나를 위해 어떤 시도라도 해 줄 사람이 있습니까?

의견을 보내주십시오.

+0

asp에서 OnClick 대신 OnClientClick을 사용할 수 있습니다. Button – codingbiz

+0

그 것이 쉽기를 바랄뿐입니다. 이미 시도했습니다 ... "서버 태그가 잘 형성되어 있지 않습니다." – wotney

답변

2

우선 rowdatabound에 온 클릭을 할당 인용 수 - 내가 할 수 없었다 codingBiz의 도움없이 이것을 대답했습니다. 그래서 고마워 !!

트릭은 <input type="button"> 버튼을 버리고 서버 컨트롤로 이동하여 RowDataBound에 onclick 이벤트를 추가하는 것이 었습니다.

onclick 이벤트에 몇 가지 javascript를 추가해야하기 때문에 처음으로이 기능을 사용할 수 없었습니다. 표준 HTML 단추 컨트롤에서 작동하지만 ASP에서는 작동하지 않습니다. :단추. CodingBiz는 RowDataBound에서 onclick 이벤트를 추가한다고 지적했습니다.

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Button runat="server" ID="btnDateRange" Text="asp Date Range" CssClass="JQDatePicker SmallText FloatRight WrapButtonText" /> 
     <asp:Button ID="btnShowImpressions" CommandArgument='<%# Eval("ImpressionTagID") %>' CommandName="ShowImpressions" Text="Total Impressions" runat="server" UseSubmitBehavior="false" CssClass="SmallText FloatLeft WrapButtonText" Width="80px" /> 
    </ItemTemplate> 
</asp:TemplateField> 

코드 뒤에 :

 protected void gridImpressionTags_OnRowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     Button btnDateRange = e.Row.FindControl("btnDateRange") as Button; 

     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      Button btn = e.Row.Cells[5].Controls[1] as Button; 
      string datakey = gridImpressionTags.DataKeys[e.Row.RowIndex].Value.ToString(); 

      btn.Attributes["onclick"] = "javascript:document.getElementById('hdnImpressionTagID').value = '" + datakey + "'"; 
     } 
    } 
몇 가지 코드 변경으로 페이지

ASPX ... 나는 그것을 작업 가지고, 올바른 행과 datakey 데이터에 액세스 할 수 있도록

3

1) 버튼을 asp : button으로 되돌리고 OnClick 대신 OnClientClick을 사용할 수 있습니다. 이 컨텍스트에서 OnClick은 자바 스크립트 대신 서버 이벤트 처리를위한 것입니다. 내가 코드 숨김에서 컨트롤을 액세스하는 방법에 집중했다을 : 자바 스크립트를 사용하려면 HTML 버튼

업데이트를 RUNAT = "서버"를 추가)

2 OnClientClick

를 사용합니다. 그것이 그렇게 쉬운 일이 아니라고 나는 당신과 동의이 자바 스크립트

<input type="button" onclick='<%# String.Format("javascript:document.getElementById('hdnImpressionTagID').value = '{0}'", Eval("ImpressionTagID")) %>' /> 

업데이트

을보십시오. 당신은 뒤에 코드와 일치하지 않는 돌봐하기 위해 온 클릭을 할당 이동

1) <asp:Button runat="server ID="btnDateRange" Text="Date Range" />

2)

protected void GridView_OnRowDataBound(object sender, GridViewRowEventArgs e) 
{ 
     Button btnDateRange = e.Row.FindControl("btnDateRange") As Button; //if you used Asp:Button 
     btnDateRange.Attributes["onclick"] = "javascript:document.getElementById('hdnImpressionTagID').value = '"+e.Row.DataItem("ImpressionTagID")+"'"; 
} 
+0

나는 그것이 쉽기를 바란다, 나는 이미 그것을 시도했다 ... "서버 태그가 잘 형성되어 있지 않다." – wotney

+0

나는 당신이 전선을 건널 수 있다고 생각한다. 입력 버튼은 잘 작동하지만 코드 뒤에서는 접근 할 수 없다. asp : button은 코드 뒤에서 액세스 할 수 있지만 asp 스타일 버튼에 업데이트 된 'onclick'제안을 적용하더라도 "서버 태그가 제대로 형성되지 않았습니다."라는 결과를 반환합니다. – wotney

+0

나를 상관하지 마십시오. 그것은 runat = "server"를 제거했기 때문에 작동했습니다. codebebind에서 컨트롤에 액세스하려면 RUNAT = "서버" – codingbiz

관련 문제