簡體   English   中英

為什么即使我不通過回發重新綁定,Repeater ItemCommand也不會觸發?

[英]Why Repeater ItemCommand Doesn't fire, even if i don't rebind by post back?

如標題所示,我無法啟動itemcommand(什么都沒發生)。 在大驚小怪之前,讓我告訴你我看一下所有這樣的論壇和stackoverflow問題:

中繼器ItemCommand不會觸發

中繼器的ItemCommand不能與LinkBut​​ton一起觸發

但是我仍然對此有疑問,所以請看一下我的代碼並引導我。

我的ASPX代碼是:

<div class="span4">
                    <aside class="left-sidebar">
                        <div class="widget">
                            <div class="input-append">
                                <input class="span2" id="SearchPhrase" type="text" placeholder="Type a Phrase" maxlength="20" runat="server" />
                                <asp:Button ID="AppendedInputButton" runat="server" class="btn btn-color" OnClick="AppendedInputButton_Click" Text="Search" />
                            </div>
                        </div>
                        <div class="widget">
                            <h5 class="widgetheading">Categories</h5>
                            <ul class="cat">
                                <asp:Repeater ID="RPTCategories" runat="server" DataSourceID="SDSCategories">
                                    <ItemTemplate>
                                        <li><i class='icon-angle-right'></i>&nbsp
                                            <asp:HyperLink ID="HLCategories" runat="server" NavigateUrl='<%# string.Format("~/En/News/{0}/{1}",Eval("CategoryId"),Eval("CategoryName").ToString().Replace(" ","-")) %>'><%#Eval("CategoryName")%></asp:HyperLink>
                                            <sub>&nbsp(<%# Eval("PostsCount") %>)&nbsp</sub></li>
                                    </ItemTemplate>
                                </asp:Repeater>
                                <asp:SqlDataSource ID="SDSCategories" runat="server" SelectCommand="SELECT C.CategoryId,CategoryName,COUNT(P.CategoryId) as PostsCount FROM TblCategory C left join TblPost P ON C.CategoryId=P.CategoryId AND C.Deleted <> 'True' AND P.Deleted <> 'True' GROUP BY CategoryName,C.CategoryId ORDER BY CategoryName ASC" ConnectionString="<%$ ConnectionStrings:ConnectionCS %>"></asp:SqlDataSource>
                            </ul>
                        </div>
                        <div class="widget">
                            <h5 class="widgetheading">Recent posts</h5>
                            <ul class="cat">
                                <asp:Repeater ID="RPTRecentPosts" runat="server" DataSourceID="SDSRecentPosts">
                                    <ItemTemplate>
                                        <li><i class='icon-angle-right'></i>&nbsp
                                            <asp:HyperLink ID="HLRecentPosts" runat="server" NavigateUrl='<%# string.Format("~/En/Post/{0}/{1}",Eval("PostId"),Eval("Title").ToString().Replace(" ","-")) %>'><%#Eval("Title")%></asp:HyperLink>
                                            <sub>&nbsp(<%# Eval("SubmitDate") %>)&nbsp</sub></li>
                                    </ItemTemplate>
                                </asp:Repeater>
                                <asp:SqlDataSource ID="SDSRecentPosts" runat="server" SelectCommand="SELECT TOP 5 PostId,Title,SubmitDate FROM TblPost Order BY PostId DESC" ConnectionString="<%$ ConnectionStrings:ConnectionCS %>"></asp:SqlDataSource>
                            </ul>
                        </div>
                    </aside>
                </div>

<div class="span8">
      <asp:Repeater ID="RPTPosts" runat="server">
      <ItemTemplate>
       <br />
       <article>
       <div class="row">
       <div class="span8">
       <div class="post-heading">
       <h3>
       <asp:HyperLink ID="HLPostTitle" runat="server" NavigateUrl='<%# string.Format("~/En/Post/{0}/{1}",Eval("PostId"),Eval("Title").ToString().Replace(" ","-")) %>'><%#Eval("Title")%></asp:HyperLink>
       </h3>
       </div>

       <div class="post-image">
       <asp:Image ID="IMGPostImage" runat="server" AlternateText='<%#Eval("Title") %>' ImageAlign="AbsMiddle" ImageUrl='<%# "~/Image/Blogs/"+ Eval("ImageName")%>' />
       </div>
       <div class="meta-post">
       <a href="#" class="author">By<br />Admin</a>
       <asp:HyperLink ID="HLPostDate" CssClass="date" runat="server" NavigateUrl='<%# string.Format("~/En/News/{0}",Eval("SubmitDate").ToString().Replace("/","-"))%>'><%# Eval("SubmitDate", "{0:d/MMMM}") %><br />
       <%# Eval("SubmitTime") %></asp:HyperLink>
       <br />
       <i class="icon-tags"></i>
       <p class="keywords" runat="server" id="KeyWords"><%# Eval("Kewords").ToString().Replace(","," - ")%></p>
       </div>

       <div class="post-entry">
       <div class="subtext">
       <%# Eval("MainText").ToString() %>
       </div>
       <br />
       <asp:HyperLink ID="PostLink" runat="server" CssClass="read-more" NavigateUrl='<%# string.Format("~/En/Post/{0}/{1}",Eval("PostId"),Eval("Title").ToString().Replace(" ","-")) %>'>Read more about&nbsp<%#Eval("Title")%></asp:HyperLink>
        </div>
        </div>
        </div>
        </article>
        <br />
        </ItemTemplate>
        </asp:Repeater>

      <div id="pagination">
      <span class="all" runat="server" id="CurrentPage">Total Pages</span>
      <asp:Repeater ID="RPTPaging" runat="server" Visible="false" OnItemDataBound="RPTPaging_ItemDataBound" OnItemCommand="RPTPaging_ItemCommand" >
      <ItemTemplate>
      <asp:LinkButton ID="BtnPage" CssClass="inactive" CommandName="Page"  CommandArgument="<%# Container.DataItem %>" runat="server" Text="<%# Container.DataItem %>"></asp:LinkButton>
       </ItemTemplate>
       </asp:Repeater>
       </div>

在這里,我的C#代碼是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Microsoft.AspNet.FriendlyUrls;

namespace KamSln.En
{
    public partial class News : System.Web.UI.Page
    {
        DBQuerys DBQ = new DBQuerys();
        Funcs Fn = new Funcs();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                NewsPagedData();
            }
        }
        protected void AppendedInputButton_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/En/Search/" + SearchPhrase.Value.ToString());
        }
        protected void RPTPaging_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            ViewState["PageNumber"] = Convert.ToInt32(e.CommandArgument);
            NewsPagedData();
        }
        public int CurrentPageNumber
        {
            get
            {
                if (ViewState["PageNumber"] != null)
                {
                    return Convert.ToInt32(ViewState["PageNumber"]);
                }
                else
                {
                    return 1;
                }
            }
            set
            {
                ViewState["PageNumber"] = value;
            }
        }
        private void NewsPagedData()
        {
            DataTable dt = GetNews();
            DataView dv = new DataView(dt);
            PagedDataSource pagedItems = new PagedDataSource();
            pagedItems.DataSource = dv;
            pagedItems.AllowPaging = true;
            pagedItems.PageSize = 1;
            pagedItems.CurrentPageIndex = CurrentPageNumber - 1;
            ViewState["PageNumber"] = CurrentPageNumber;

            int rowsCount = dv.Table.Rows.Count;
            int totalPages = rowsCount / 1;
            if (totalPages > 1)
            {
                RPTPaging.Visible = true;
                CurrentPage.Visible = true;
                System.Collections.ArrayList pages = new System.Collections.ArrayList();
                for (int i = 0; i < totalPages; i++)
                    pages.Add((i + 1).ToString());
                RPTPaging.DataSource = pages;
                RPTPaging.DataBind();

            }
            else
            {
                RPTPaging.Visible = false;
                CurrentPage.Visible = false;
            }
            CurrentPage.InnerText = "Page " + CurrentPageNumber + " of " + totalPages;
            RPTPosts.DataSource = pagedItems;
            RPTPosts.DataBind();
        }
        protected void RPTPaging_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            LinkButton lb = (LinkButton)e.Item.FindControl("BtnPage");
            if (!Fn.ValidityCheck(lb.Text, "MightNull") && ViewState["PageNumber"] != null)
                if (ViewState["PageNumber"].ToString() == lb.Text)
                    lb.CssClass = "current";

        }
        private DataTable GetNews()
        {
            DataTable NewsTable = new DataTable();
            NewsTable = DBQ.PostsList(null, 'A', null, null);
            if (Page.RouteData.Values.Count > 0)
            {
                string FRdatta = Page.RouteData.Values.Keys.First().ToString();
                if (Page.RouteData.Values[FRdatta].ToString() != "En")
                {
                    switch (Page.RouteData.Values.Keys.First())
                    {
                        case "ci": NewsTable = DBQ.PostsList(Page.RouteData.Values["ci"].ToString(), 'C', null, null); break;
                        case "pd": NewsTable = DBQ.PostsList(null, 'D', Page.RouteData.Values["pd"].ToString(), null); break;
                        case "sf": NewsTable = DBQ.PostsList(null, 'T', null, Page.RouteData.Values["sf"].ToString());
                            foreach (DataRow row in NewsTable.Rows)
                            {
                                row["Title"] = row["Title"].ToString().Replace(Page.RouteData.Values["sf"].ToString(), "<span style='color:blue;font-weight:bold;text-decoration:underline;'>" + Page.RouteData.Values["sf"].ToString() + "</span>");
                                row["MainText"] = row["MainText"].ToString().Replace(Page.RouteData.Values["sf"].ToString(), "<span style='color:blue;font-weight:bold;text-decoration:underline;'>" + Page.RouteData.Values["sf"].ToString() + "</span>");
                            }
                            break;
                        default: NewsTable = DBQ.PostsList(null, 'A', null, null); break;
                    }
                }
            }
            return NewsTable;
        }




    }
}

不使用鏈接按鈕觸發

嘗試使用LinkBut​​ton的click事件而不是OnItemCommand 您可以在Click Event中使用以下代碼訪問LinkBut​​ton。

LinkButton lb = (LinkButton)Sender;

要么

LinkButton lb = Sender as LinkButton;

親愛的專家2天后,我終於弄清了為什么我的頁面不回發。 在我嘗試用Java腳本手動發回按鈕后,我失敗了。 我試圖跟蹤腳本,但發現了螢火蟲錯誤:

 TypeError: theForm.submit is not a function
     theForm.submit();

當我在google上搜索時,我發現我的MasterPage中有一個帶有id =“ Submit”的按鈕,並且因為“ submit is a function”意味着您命名了Submit按鈕或其他提交元素。 將按鈕重命名為btnSubmit,您的呼叫將神奇地工作。

當您將按鈕命名為Submit時,您將覆蓋表單上的commit()函數。

所以這個問題解決了。 謝謝大家。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM