【问题标题】:How to convert an existing HTML/JQuery to ASP.net/JQuery code如何将现有的 HTML/JQuery 转换为 ASP.net/JQuery 代码
【发布时间】:2014-09-08 16:04:47
【问题描述】:

我有以下 HTML 页面,它显示一些选项卡以及内容,并根据用户单击的选项卡更改内容可见性:

HTML:

<ul id="tabs">
    <li><a href="#" title="tab1">One</a></li>
    <li><a href="#" title="tab2">Two</a></li>
    <li><a href="#" title="tab3">Three</a></li>
    <li><a href="#" title="tab4">Four</a></li>    
</ul>

<div id="content"> 
    <div id="tab1">THIS IS TAB 1</div>
    <div id="tab2">THIS IS TAB 2</div>
    <div id="tab3">THIS IS TAB 3</div>
    <div id="tab4">THIS IS TAB 4</div>
</div>

隐藏和显示content的JQuery:

<script> 
$(document).ready(function() {
    $("#content div").hide(); // Initially hide all content
    $("#tabs li:first").attr("id","current"); // Activate first tab
    $("#content div:first").fadeIn(); // Show first tab content

    $('#tabs a').click(function(e) {
        e.preventDefault();        
        $("#content div").hide(); //Hide all content
        $("#tabs li").attr("id",""); //Reset id's
        $(this).parent().attr("id","current"); // Activate this
        $('#' + $(this).attr('title')).fadeIn(); // Show content for current tab
    });
})();
</script>

我最终使用&lt;asp:BulletedList&gt; 代替UL/LI&lt;asp:Panel&gt; 代替UL/LIDIV,而不是DIV,因为我必须在代码后面显示和隐藏选项卡。

所以我使用 ASP.net 控件创建了以下内容:

<asp:BulletedList ID="tabs" ClientIDMode="Static" runat="server" DisplayMode="HyperLink">
    <asp:ListItem Text="Status" Value="#"></asp:ListItem>
    <asp:ListItem Text="Your Tasks" Value="#"></asp:ListItem>
    <asp:ListItem Text="Messages" Value="#"></asp:ListItem>
    <asp:ListItem Text="Dependencies" Value="#"></asp:ListItem>
    <asp:ListItem Text="Documents" Value="#"></asp:ListItem>
    <asp:ListItem Text="Pro-Forma" Value="#"></asp:ListItem>
    <asp:ListItem Text="Admin Controls" Value="#"></asp:ListItem>
</asp:BulletedList>

<asp:Panel ID="content" runat="server" ClientIDMode="Static">
    <asp:Panel ID="tab1" ClientIDMode="Static" runat="server">THIS IS A TEST #1</asp:Panel>
    <asp:Panel ID="tab2" ClientIDMode="Static" runat="server">THIS IS A TEST #2</asp:Panel>
    <asp:Panel ID="tab3" ClientIDMode="Static" runat="server">THIS IS A TEST #3</asp:Panel>
    <asp:Panel ID="tab4" ClientIDMode="Static" runat="server">THIS IS A TEST #4</asp:Panel>
    <asp:Panel ID="tab5" ClientIDMode="Static" runat="server">THIS IS A TEST #5</asp:Panel>
    <asp:Panel ID="tab6" ClientIDMode="Static" runat="server">THIS IS A TEST #6</asp:Panel>
    <asp:Panel ID="tab7" ClientIDMode="Static" runat="server">THIS IS A TEST #7</asp:Panel>
</asp:Panel>

并保持与之前发布的相同的 JQuery。当我第一次加载 ASP.net 页面时,Status 选项卡被突出显示并且来自content 面板的tab1 被显示。当我点击任何标签时,content 面板不显示任何内容,它是空白的。

我意识到,这是因为 JQuery 正在使用每个 LI 内链接中的 title 标签,但不幸的是我不能在 &lt;asp:ListItem&gt; 内使用 HyperLink,因为 VS 抱怨说这不是标准。如何修改我的代码,以便能够使用 ASP.net 控件并使 JQuery 正常工作?

Chrome 显示:

【问题讨论】:

    标签: c# jquery html asp.net webforms


    【解决方案1】:

    用这个替换开头的 HTML,将标签目标放在 href 中:

    <asp:BulletedList ID="tabs" ClientIDMode="Static" runat="server" DisplayMode="HyperLink">
        <asp:ListItem Text="Status" Value="#tab1"></asp:ListItem>
        <asp:ListItem Text="Your Tasks" Value="#tab2"></asp:ListItem>
        <asp:ListItem Text="Messages" Value="#tab3"></asp:ListItem>
        <asp:ListItem Text="Dependencies" Value="#tab4"></asp:ListItem>
        <asp:ListItem Text="Documents" Value="#tab5"></asp:ListItem>
        <asp:ListItem Text="Pro-Forma" Value="#tab6"></asp:ListItem>
        <asp:ListItem Text="Admin Controls" Value="#tab7"></asp:ListItem>
    </asp:BulletedList>
    

    然后将 jQuery 中的最后一行更改为:

    $('#' + $(this).attr('title')).fadeIn(); // Show content for current tab
    

    收件人:

    $($(this).attr('href')).fadeIn();
    

    修改您的脚本块,以便在活动选项卡的 fadeIn 上链接动画,如下所示:

    // Initially hide all content
    $("#content div").css('display', 'none');
    
    // Then activate the first tab
    $("#tabs li:first").attr("id", "current");
    
    // Now fade it in
    $("#content div:first").fadeIn();
    
    // Click event 
    $('#tabs a').click(function (e) {
    
        // Get a handle to the current object when we move into the scope 
        // of the hide callback
        var what = $(this);
    
        e.preventDefault();
    
        // Hide all content
        $("#content div:visible").hide(
            0,
            function () {
                $("#tabs li").attr("id", ""); //Reset id's
                what.parent().attr("id", "current"); // Activate this
                $(what.attr('href')).fadeIn();
            }
        ); 
    
        // Return false to ensure navigation doesn't fire
        return false;
    });
    

    【讨论】:

    • 谢谢!!! :) 在 IE 中的 VS 中效果很好,但是当我将网站的 URL 复制到 Chrome 中时,所有的内容 div 都会显示出来......我将用屏幕截图更新我的问题。
    • 好吧,我不太关心 I.E.所以我宁愿有一个 Mozilla / webKit 友好的解决方案。我在 Firefox 中测试过,我会在 Chrome 中查看。
    • 我并不怀疑你,但它在 Windows Chrome 35 中对我的作用与在 Firefox 30 中的作用相同。
    • 你看过截图了吗? Chome 显示不正确...我也不关心 IE ;) 但不幸的是最终用户将主要使用 IE。
    • 当前选项卡未突出显示,并且在 Chrome 和 FF 中加载页面时显示所有 DIV :/
    【解决方案2】:

    在这里找到这个答案:http://channel9.msdn.com/Forums/TechOff/257894-aspnet-BulletedList-list-item-with-HTML-

    尝试使用中继器。 BulletedList 很遗憾其 ListItem 不支持 HTML。

    标记

    <asp:Repeater ID="Repeater1" runat="server">
        <HeaderTemplate><ul></HeaderTemplate>
        <ItemTemplate><li><span class="label">Test</span> <%# Container.DataItem %></li></ItemTemplate>
        <FooterTemplate></ul></FooterTemplate>
    </asp:Repeater>
    

    【讨论】:

    • 实际上它呈现为 HTML UL/LI 但我希望里面的 有标题。
    猜你喜欢
    • 2019-11-30
    • 2022-12-02
    • 2020-09-29
    • 2019-06-28
    • 1970-01-01
    • 2017-09-23
    • 2021-04-20
    • 2018-12-13
    • 2016-04-09
    相关资源
    最近更新 更多