QnA
사용언어
(칠해주세요) => (C#,VB) |
사용툴 (VS) : Visual Studio 2010 |
운영체제 (OS) : Windows 7 |
상세언어(칠해주세요.)
=> 1) ASP.NET, 2) ASP.NET MVC, 3) ASP.NET AJAX |
안녕하세요 ㅠㅠ 질문한 지 얼마 되지도 않아서 결국 또 질문을 올리네요 ㅠㅠ
항상 죄송하고 감사하게 생각하고 있습니다 ㅠㅠ
다름이 아니고 오늘의 문제는 리피터로 데이터를 불러오는 데 그 안에서(C#) 자바스크립트를 실행하고 싶습니다
// ----------------------------------- aspx
<asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_OnItemCommand">
<HeaderTemplate>
<table style="width:1000px; border:solid 1px #ccc; border-collapse:collapse;">
<tr align="center" style="border:solid 1px #ccc;">
<td style="height:25px; border:dashed 1px #ccc;"> </td>
<td style="border:dashed 1px #ccc;"> </td>
<td style="border:dashed 1px #ccc;">마스터코드</td>
<td style="border:dashed 1px #ccc;">한글이름</td>
<td style="border:dashed 1px #ccc;">영문이름</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr align="center" style="border:solid 1px #ccc;">
<td height="25"><asp:CheckBox ID="eachCheck" runat="server" /></td>
<td><asp:ImageButton ID="btnModify" ImageUrl="/Image/Menu/add2.png" AlternateText="수정" CommandArgument='<%# Eval("MasterCode") %>' OnCommand="Repeater1_OnItemCommand" CommandName="Modify" runat="server" /></td>
<td><input type="hidden" id="Code" value='<%# Eval("MasterCode") %>' runat="server" /><%# Eval("MasterCode") %></td>
<td><a href='xxxxxxxxxxxxjavascript:aa("Detail", "<%# Eval("MasterCode") %>");'><%# Eval("KName") %></a></td>
<td><%# Eval("EName") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
// ----------------------------------- c#
// OnCommand에서 발생한 이벤트 요게 안되서 밑에 있는 함수도 해봤지만 .. ㅠㅠ 안되네요 ㅠㅠ
public void Repeater1_OnItemCommand(object sender, CommandEventArgs e)
{
string CommandName = e.CommandName.ToString();
string Num = e.CommandArgument.ToString();
string Add = CommandName + "/" + Num;
Label1.Text = CommandName + " " + Num;
string.Format("xxxxxxxxxxxxjavascript:aa('{0}', '{1}')", CommandName, Num);
}
// OnItemCommand에서 발생한 이벤트
public void Repeater1_OnItemCommand(object sender, RepeaterCommandEventArgs e)
{
string CommandName = e.CommandName.ToString();
string Num = e.CommandArgument.ToString();
string Add = CommandName + "/" + Num;
Label1.Text = CommandName + " " + Num;
string.Format("xxxxxxxxjavascript:aa('{0}', '{1}')", CommandName, Num);
// ScriptManager.RegisterClientScriptBlock(this.Page, this.GetType(), Add, "bb()", false);
}
// ----------------------------------- script
function aa(mode, code) {
var Detail_Page = "HR01_" + mode + ".aspx?Mode=" + mode + "&PageNum=HR01&MasterCode=" + code;
window.open(Detail_Page, 'HR_Popup', 'width=700, height=500');
}
코드는 이런식으로 되어있는데요
두번째에 있는 C# 함수 Repeater1_OnItemCommand 의 리턴값을 string으로 하고 싶은데(자바스크립트를 실행하기 위해)
public string 으로 하고 return을 string.Format("xxxxxxxxxxxxjavascript:aa('{0}', '{1}')", CommandName, Num);
이거로 해주면 다른 그냥 일반 버튼 이벤트는 실행이 되는데이 이벤트는 repeater 이벤트라 안되는 것 같습니다.. 다른 방법이 없을까요 ㅠㅠ?
그 뭐지 문자열로 추가해서 실행시키는 방법은 위에서 절대로 쓰지 말라는 지시가 내려와서 쓰고 싶어도 쓸 수가 없네요 ㅠ
방법 좀 알려주세요 ㅠㅠ repeater 체크박스로 수정 삭제 하려다가 포기하고 팝업 띄워서 하려고 하는데 요것마저 잘 안되네요 ㅠ
팝업이 뜨면 어찌 저찌 흉내는 낼 수 있을 것 같은데 ㅠㅠ..
혹시나 해서 첨부파일도 같이 올립니다 ㅠㅠ 깨지는 게 많더라구요 다음에서..
helpme.txt
+ 앗 그리고 제가 Repeater로 게시판 형식을 만들건데... 리피터를 이용한 체크박스로 수정 삭제 가능한 예제 혹시 아는 곳이있나요 ㅠㅠ? 다들 그리드뷰만 있고 리피터는 거의 없더라구요 ㅠㅠ...
아시는 분 있으시면 도와주세요 ㅠㅠ 혹은 팁이라도.. ㅠㅠ
혹은 C#에서 자바스크립트 호출하는 방법이라도 제발 ㅠㅠ..
첫댓글 여기도 올리셨네용
asp.net 서버컨트롤은 랜더링을 거쳐 클라이언트에 전달 되면
ID값이 치환이 됩니다. 이는 브라우져상에서 소스보기로 확인 가능하고요.
해당 변경된 ID를 랜더링될때 넘겨주고 싶을땐 컨트롤.ClientID 라는게 존재하고용.
또. aspx 에서 처리할땐 <%= 컨트롤.ClientID %> 로 넘겨줍니다.
랜더링 이후 자바스크립트로 해당 컨트롤에 접근하시고자 하시면 ClientID를 파악 후 자바스크립트로 찾아서 처리 하시면 되고요.
수정 삭제 버튼 같은 경우 아예 없애버리는게 좋을테니... 바인딩 할때 Visible = false; 주면 아예 랜더링을 안하는걸로 기억합니다.
넵? 저는 다른 곳에는 안올렸었는데 ㅠㅠ..
음... 제가 이해력이 안좋아서 그런지 무슨 말씀이신지 잘 모르겠습니다..
제가 구현하고자 하는 것은 이미지 버튼을 눌렀을 때 서버 컨트롤로 가서 해당 서버 컨트롤이 실행이 된 후(OnCommand="Repeater1_OnItemCommand") 그 서버 컨트롤 안에서 자바스크립트 함수를 부르고 싶은데 ..
string.Format("xxxxjavascript:aa('{0}', '{1}')", CommandName, Num); 이런 식으로요 ㅠㅠ
죄송하지만 문외한인 저를 위해 한 번 더 설명해주시면 안될까요 ㅠㅠ? 열 번 이상 읽어봤는데도 잘 모르겠습니다..ㅜㅜ
설계된 UI가 헤깔리네요. 체크박스로 다량의 게시물을 일괄 삭제하고, 수정기능을 넣고자 하는것인지, 아니면 그냥 단일게시물을 수정 삭제하는것인가요? 단일건별 수정 삭제라면 체크박스가 무의미 한거 같고, 그렇다고 다량의 삭제 지원및 수정기능 지원이라고 보기엔 ui가 애매합니다.
같은 체크박스를 쓰지만 수정은 하나만 클릭해야 이벤트가 실행되도록 스크립트로 제어해주었구요~
삭제는 다중 삭제가 가능하도록 해주었습니다~~!!
요점은 수정버튼을 누르면 해당 게시물 수정이 되고, 체크박스는 삭제기능을 위해 동작한다는 의미네요.
서버에서 모두 처리하거나 클라이언트에서 처리하는거 모두 가능합니다. 선택의 문제입니다.
서버 단에서 처리한다면
1. 수정 버튼은 서버 이벤트로 타게 만들어 처리해야 겠네요
2. 다중 삭제는 리피터를 루프돌면서 값을 확인해야 겠습니다.
클라이언트에서 처리한다면
1. 수정 버튼 클릭시 수정 url 호출or ajax 처리
2. 다중 삭제시 아이디값을 파라미터 전송으로 삭제 url 호출 or ajax 처리 하면 됩니다.
서버 처리는 예제가 간단하니 보여드릴수 있겠네요..
OnItemCommand 이벤트의 경우 해당 버튼을 클릭 했을때 발생되는 이벤트 입니다. 서버단에서 발생하는 이벤트로 이벤트 발생 후 자바스크립트를 클라이언트 소스 코드에 넣는 형태로 구현 하신게 된겁니다. 우선 이벤트를 onitemdatabound 이벤트로 바꾸시고 각각 행이 바운드 될때 위 소스 형태로 넣으시면 될듯 합니다. http://msdn.microsoft.com/ko-kr/library/system.web.ui.webcontrols.repeater.onitemdatabound.aspx <-- 이 링크 함 참고해 보시고, 구글에서 "repeater onitemdatabound" 로 검색 해보시면 샘플 많이 있습니다.
ㅠㅠ 어렵네요 닷넷.. 일러주신대로 찾아보겠습니다! 답변 감사드려요~~!!!
비슷한 질문을 훈스닷넷에서 봐서 같은분이신줄 알았네요.
음 글쓰신분이 asp.net 의 이벤트 흐름에 대해 정확히 이해 하고 계신지 잘 모르겠네요...
서버 컨트롤이 클릭되었을때 -> OnClientClick 이 자바스크립트 호출한 이후 -> 서버단에서 Click 이벤트를 처리하는데요...
님께서 하시는건 포스트 백이 발생해서 서버 랜더링 끝나면 그때 다시 페이지가 열릴때 aa 를 호출하시겠다는건가요???
그러면 해당 컨트롤의 Click이벤트에서 스크립트를 넣어주시면 되는데요.
그게 객체가 this.Script... <--- 관련프로퍼티에 .Start... 뭐 있는데요.. 거기에 스크립트 그대로 넘겨주심 됩니당.
ㅠㅠ 제가 원래 닷넷에 대해 전혀 모르는데 이번에 개발을 하라고 들어와서 ㅠㅠ..
당장 기본도 모르는데 해야하니 막막하더라구요 ㅠㅜ..ㅋㅋ 답변 감사합니다!
개발자도 아니신데 정말 대단하셔요 ㅠㅠ!! 전 말처럼 쉽지 않네요 ㅠㅠㅋㅋ
제가 웹 개발자가 아니라 ^^;; 외우질 못했네용. ...
repeater 안에 서버컨트롤을 두고 나서 각각의 버튼에 대한 이벤트값을 추출하고자 한다면, repeater 의 OnItemCommand 를 사용해야 합니다. 이벤트의 파라미터에서 CommandSource 를 이용하여 객체로 형변환 한다음, 값을 추출하여 사용하시면 되겠습니다. msdn 에 자세히 나와 있네요. http://msdn.microsoft.com/ko-kr/library/system.web.ui.webcontrols.repeater.itemcommand.aspx
리피터를 이용한 체크박스로 수정 삭제 가능한 예제 라..... 사이트 하나 추천해 드릴게요. 약간 응용하시면 잘 하실 것 같네요. http://freemind.tistory.com/17
링크까지 달아주시고 ㅠㅠ 정말 감사합니다~~
아.. ㅠㅠ 리스트 형식으로 보여줄 건데 GridView를 써야할 지 Repeater를 써야할 지 DataList를 써야할 지 아님 기타 등등.. 뭘 써야할 지 감이 안잡히네요 ㅠㅠ
다들 저마다의 장점이 있는 것 같은데 ㅠㅠ..
Repeater를 쓰고 싶은데 새로고침이라든지 버튼 여러 번 눌렀을 때 라든지에 대해 제어해줄 게 너무 많네요 ㅠㅠ
GridView는 조금 단순한 반면에 Css를 많이 수정하지 못하고 ㅠㅠ 게다가 페이징 위치 수정이라든지.. ㅠㅠ 쉽지 않더라구요 ... 힝