c#
  • asp.net
  • data-binding
  • 2009-04-16 4220 views 5 likes 
    5

    Tôi không thể làm việc này và tôi không thể hiểu tại sao.Sử dụng vùng chứa.DataItem trong một ItemTemplate

    <ItemTemplate> 
    <% if (Field(((DataRowView)(Container.DataItem)), "Video File") != "") { %> 
    <a href='upload/images/<%# Field(((DataRowView)(Container.DataItem)), "Video File")%>'>Download Link</a> 
    <% } else { %> 
    <embed height="14" width="661" name="plugin" src="<%# ContentUploadURL%>/<%# Field(((DataRowView)(Container.DataItem)), "Audio File")%>" type="audio/mpeg" autostart="false" /> 
    <% } %> 
    </ItemTemplate> 
    

    Có vẻ như đơn giản, nhưng tôi chỉ nhận được lỗi này:

    Compiler Error Message: CS0103: The name 'Container' does not exist in the current context

    Tôi đã ở đây cả ngày và tôi là một newbie tổng số làm việc trên một CMS trong asp. Tôi không thực sự muốn học ASP, chỉ để có được một điều này làm việc.

    Nếu bất cứ ai có thể chỉ cho tôi đúng hướng, tôi sẽ rất biết ơn.

    Cảm ơn!

    +0

    Không có câu trả lời cho câu hỏi ban đầu của bạn ... sử dụng thuộc tính 'Hiển thị' là một cách xung quanh nhưng không ai trả lời vấn đề này rất quan trọng bằng cách sử dụng câu lệnh' if'. – Jaider

    Trả lời

    12

    Bạn không thể sử dụng vùng chứa.DataItem bên ngoài biểu thức dữ liệu <% # ...%>.

    Tôi đề nghị bạn thay đổi mã của bạn để một cái gì đó như thế này (xin lỗi nhưng tôi không thể kiểm tra nó hiện tại):

    <ItemTemplate> 
        <asp:HyperLink runat="server" 
        Visible='<%# Eval("Video File") != "" %>' 
        NavigateUrl='<%# Eval("Video File")' Text="Download Link" /> 
    
        <embed runat="server" Visible='<%# Eval("Video File") == "" %>' 
        height="14" width="661" name="plugin" 
        src="<%# ContentUploadURL%>/<%# Field(((DataRowView)(Container.DataItem)), "Audio File")%>" 
        type="audio/mpeg" autostart="false" /> 
    </ItemTemplate> 
    

    Điều quan trọng là để thiết lập thuộc tính Visible của hai kiểm soát dựa trên "Video Tệp "trường của mục dữ liệu.

    Xem thêm câu hỏi này: ASP.Net conditional databinding

    1

    Ồ, cảm ơn! Điều đó chắc chắn đã giúp. Ok, vì vậy tôi thực sự cần thêm một số html bên trong, vì vậy tôi đã thử kỹ thuật trình giữ chỗ mà bạn đã chỉ cho tôi.

    Vì vậy, tôi có điều này bây giờ:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" Visible='<%# Eval("Video File") != "" %>'> 
    Video Stuff 
    </asp:PlaceHolder> 
    
    <asp:PlaceHolder id="PlaceHolder2" runat="server" Visible='<%# Eval("Video File") == "" %>'> 
    Audio Stuff 
    </asp:PlaceHolder> 
    

    Nó gần như làm việc ngoại trừ Video File xuất hiện trên cả hai trường hợp khi nó chỉ nên được cho là người đầu tiên.

    Tôi cũng đã cố gắng này:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" Visible='<%# Eval("Video File") != "" %>'> 
        Video Stuff 
        </asp:PlaceHolder> 
    
    <asp:PlaceHolder id="PlaceHolder2" runat="server" Visible='<%# Eval("Audio File") != "" %>'> 
        Audio Stuff 
        </asp:PlaceHolder> 
    

    Nhưng điều đó khiến cả hai hiển thị tất cả các thời gian. Tôi cảm thấy như nó gần như ở đó.

    Cảm ơn!

    0

    Oh, nevermind, tôi hiểu rồi !!

    này đã làm việc cuối cùng:

    <asp:PlaceHolder id="PlaceHolder1" runat="server" 
        Visible='<%# Field(((DataRowView)(Container.DataItem)), "Video File") != "" %>'> 
        Video Stuff 
        </asp:PlaceHolder> 
    
        <asp:PlaceHolder id="PlaceHolder2" runat="server" 
        Visible='<%# Field(((DataRowView)(Container.DataItem)), "Video File") == "" %>'> 
        Audio Stuff 
        </asp:PlaceHolder> 
    

    Cảm ơn bạn SO nhiều!

    +1

    Vui vì bạn đã có nó. Lần tới, hãy chỉnh sửa câu hỏi gốc của bạn thay vì tạo câu trả lời. Đó là cách nó được thực hiện ở đây. Ngoài ra, FYI, bạn có thể tránh các khối mã xấu dài bằng cách đảm bảo các dòng không quá dài. Bọc chúng bằng tay. –

    Các vấn đề liên quan