2012-09-19 5 views
0

나는 고객 목록이있는 리피터가 있습니다. 각 고객에 대해 링크 삭제 버튼이 있습니다. 하는 LinkButton의 일환으로 나는 다음과 같이 (Container.DataItem은 고객 대상 임) 명령 아규먼트로 고객 객체를 전달하려는 :Repeater 링크 단추에서 CommandArguement로 개체 전달

<asp:LinkButton ID="lnkDelete" 
    OnClientClick="return confirmDelete();" 
    OnClick="Customer_OnDelete" 
    CommandArgument="<%# Container.DataItem %>" 
    CommandName="Delete" 
    runat="server"></asp:LinkButton> 

나는이 작업을 수행 할 때 :

var button = (((LinkButton) sender)); 

    var customer= button.CommandArgument; 

버튼을 누릅니다. CommandArguement는 문자열입니다. Nhibernate를 사용할 때 모든 객체 속성이 필요하므로 모든 것을 설정해야하며 삭제 된 레코드의 ID로는 충분하지 않습니다. 쉼표로 구분 된 값 목록을 명령 인수에 전달하는 것과 관련하여 온라인 예제를 보았지만이를 피하기를 원합니다. 이것이 가능한가?

아이디어가 있으십니까? 감사합니다.

+1

방금 ​​(? 내가 가정의 ID 인) 해당 문자열을 사용하지 못할하고 데이터베이스를 쿼리하는 것을 사용 필요한 모든 요소를 ​​얻으시겠습니까? getCustomerById (int id)와 같은 것? – Thousand

+0

@ 제인 도우 - 맞아. 이것이 일반적으로 이러한 시나리오에서 수행되는 작업입니다. 특히 ORM을 사용하면 컨텍스트가 어쨌든 "저장"을 누르지 않을 것입니다. – Josh

답변

2

에게 가장 좋은 방법은 다음과 같습니다

  • 는 고객 엔티티

사용 Repeater을 삭제 ID

  • 하여 고객을 얻기 CommandArgument
  • 의 ID를 가져옵니다 이벤트 OnItemCommand. 이 이벤트에는 RepeaterCommandEventArgs이 포함됩니다. 당신의 asp:LinkButton 태그 사용에

    protected void myRepeater_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
        int customerID= Convert.ToInt32(e.CommandArgument.ToString()); 
    } 
    

    : 당신은 CommandArgument이 방법을 얻을 어차피

    CommandArgument='<%# DataBinder.Eval(Container.DataItem, "ID") %>' 
    
  • +0

    이것이 내가해야 할 일인 것처럼 보입니다. 고객을 지나치고 삭제를 위해 사용하는 것입니다. – MikeL

    +0

    그래, 이걸 잘 해봐. – Fonseca

    +0

    int customerID = Convert.ToInt32 (e.CommandArgument.ToString()); 이것은 코드에서 심각한 제한 사항입니다 ... 항상 try.parse를 사용해야합니다. – Shakawkaw

    1

    여기에서 실행중인 문제는 리피터가 HTML로 변환되어야한다는 것입니다. 따라서 요소 속성에서 스펙이 허용하는 범위로 제한됩니다.

    서버 쪽에서는 CommandArgument이 항상 문자열이므로 코드화 된대로 원하는대로 할 수 없습니다.

    이제 ... 앞서 말한 CSV처럼 이것을 해결하기 위해 구현할 수있는 몇 가지 해킹이 있거나 binary serializationBase64 encode 결과를 사용할 수 있습니다. 그러나 이것들은 모두 끔찍한 해결책입니다!

    어떻게해야하는지 다시 생각해보십시오. 나는 쉬운 방법이 있다고 약속한다. 이 경우에 대한

    제 생각에는