MVC4-Refresh问题:使用foreach..loop调用3次相同的局部视图

时间:2014-11-26 12:53:44

标签: asp.net asp.net-mvc asp.net-mvc-4

我处境很棘手,     场景 - 有些小工具将在移动网站上显示。     2.其中一个小工具是RSS,用户可以为不同的主题添加多次,例如一个用于安全,一个用于新闻,一个用于事件。     3.因此我们有一个RSS部分视图,但如果用户有2个RSS小工具,则相同的部分视图应加载不同的小工具名称。这里的功能使用foreach循环正常工作。

 @foreach (var rssFeed in Model.RSSFeedList)
        {
        <article class="bm2014_bigBoxWrap bm2014_bigBoxRSS bm2014_paginate">
            <a href="#" id="btnRefresh" class="bm2014_refreshBtn" rel="external"><img src="~/Content/images/iconRefresh.png" width="20" height="20" alt="refresh icon" title="refresh icon"></a>

            <div class="bm2014_expColCtrl">
                <h1 class="bm2014_bigBoxHdr">
                    <span class="bm2014_hiddenHdr">&nbsp;</span>
                    <!-- for markup validation -->

                   @if (rssFeed.Channel.Name == "xyznews")
                   {
                        <span>@Html.Label(Labels.Title_xyz)</span>
                   }
                   else if(rssFeed.Channel.Category=="xyzRSSFeed")
                   { 
                        <!--<span>@Html.Label(Labels.xyz) - @rssFeed.Channel.Title</span>-->
                        <span>@rssFeed.Channel.Title</span>
                   }

                    <span class="bm2014_expColBtn"><img src="~/Content/images/iconPlus.png" width="32" height="32" alt="expand collapse icon" title="expand collapse icon"></span>
                </h1>
                <div class="bm2014_expColContent bm2014_bellnetRSSWrapper" id="bm2014_divBellnetRSS">
                    @Html.Partial("~/Views/Shared/_RSS.cshtml", rssFeed)                   
                </div>

            </div>
        </article>
        }
        <!--  RSS Panel end here -->
  1. 问题在于刷新问题
  2. 如果我点击所选小工具的刷新按钮,则默认情况下只会选择一个RSS名称并加载内容,而不管选择的小工具是什么。

    partialview页面代码 -

    @model Models.RSSFeed
    
    @{
        Layout = null;   
    }
    
    <script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
    <script src="~/Scripts/jquery.multilevelpushmenu.js" type="text/javascript"></script>
    <script src="~/Scripts/jquery-simple-pagination-plugin.js" type="text/javascript"></script>
    <script src="~/Scripts/jquery.dataTables.js" type="text/javascript"></script>
    <script type="text/javascript">
    
        /* scripts to load after the DOM gets ready */
        $(function () {
    
            offCanvasMenu();        // trigger Javascript controlled OFF canvas menu after AJAX refresh
    
            $.ajaxSetup({ cache: false });
    
            $("article.bm2014_bigBoxRSS #btnRefresh").on('click', function (event) {
                var $rssGadgetID = $(this).parents("article.bm2014_paginate").find("div#bm2014_divBellnetRSS");
                var $rssGadgetLdr = $rssGadgetID.find("div#bm2014_gadgetLoader");
                ajaxLoaderHeightCtrl($rssGadgetID, $rssGadgetLdr);
    
                // AJAX control
                $.ajax({
                    url: '@Url.Action("RefreshBellnetRSS", "Home", new { feedName = Model.Channel.FeedName })',
                    contentType: 'application/html; charaset=utf-8',
                    type: 'GET',
                    dataType: 'html',
                    success: function (result) {
                        $rssGadgetLdr.fadeOut(100, function () {
                            $rssGadgetID.html(result);
                            var moveRSS = $("article.bm2014_bigBoxWrap").css("float");
                            if (moveRSS == "left") {
                                mQueryAJAX("portrait", $rssGadgetID);
                            }
                            else if (moveRSS == "none") {
                                if (window.matchMedia("(orientation: portrait)").matches) {
                                    mQueryAJAX("portrait", $rssGadgetID);
                                }
                                if (window.matchMedia("(orientation: landscape)").matches) {
                                    mQueryAJAX("portrait", $rssGadgetID);
                                }
                            }
                            hideTableHeader();
                        });
                    },
                    error: function (xhr, status) {
                        alert(status);
                    }
                });
            });
        });
    
    </script>
    
    <div class="bm2014_gadgetLoader" id="bm2014_gadgetLoader" style="display: none;">
        <img src='@Url.Content("~/Content/Images/loaderGadget.gif")' width="48" height="48" alt="ajax loader image" title="ajax loader image">
    </div>
    <div class="bm2014_strategyContent">
        @if (Model.url != null)
        {            
            <table>
                <thead>
                    <th>dummy header - to be hidden</th>
                </thead>
                <tbody>
                    @foreach (var url in Model.url)
                    {
                    <tr>
                        <td>
                            <a href="@url.URL" rel="external">@url.Name</a>
                        </td>
                    </tr>
                    }
                </tbody>
            </table>
        }
    </div>
    

    需要帮助/建议

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要为3个RSS小工具提供3个刷新按钮,例如一个用于安全,一个用于新闻,一个用于事件。

在当前示例中,每次调用代码以应用click事件时,都会替换之前的事件和&#39; feedname&#39; url for ajax调用中的参数也会更新。

$(&#34; article.bm2014_bigBoxRSS#btnRefresh&#34;)。on(&#39; click&#39;,function(event){ ...... }

您需要能够区分刷新按钮并传递正确的参数。一种方法是在btnRefresh锚标记上使用data-feedname属性(如果使用HTML5)