asp.net ajax无法正常工作,页面仍然刷新 [英] asp.net ajax not working, page still refreshes

查看:67
本文介绍了asp.net ajax无法正常工作,页面仍然刷新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿所有,

长话短说:

我有一些代表项目类别的链接。在每个链接上单击,同一页面上的数据网格将填充适当的数据。我想使用ajax功能,我使用.net framework 4.5和实体框架5.我将链接和gridview放在同一个更新面板中,但是当我点击任何链接时页面仍然会刷新。

如果您希望我粘贴任何代码部分以帮助您指出问题,请告诉我。

非常感谢提前:)



ASPX代码:



 <   asp:ToolkitScriptManager     ID   =  ToolkitScriptManager1    runat   = 服务器 >  <   / asp:ToolkitScriptManager  >  
< asp:UpdatePanel < span class =code-attribute> ID = UpdatePanel1 UpdateMode = 始终 ChildrenAsTriggers = true runat = server >
< ContentTemplate >
< div >
< asp:DropDownList ID = DropDownList1 runat = server < span class =code-attribute> > < / asp:DropDownList >
< < span class =code-leadattribute> asp:TextBox ID = TextBox1 runat = 服务器 TextMode = 日期 / >
< / div >
< asp:Repeater runat = server ID = rptProjectStates >
< HeaderTemplate >
< ul >
< / HeaderTemplate >
< ItemTemplate >
< li >
< asp:LinkBut​​ton ID = lbProjectStatus 文本 =' <% #Eval( ProjectStatusTypeName%> '



OnClick = lbProjectStatus_Click runat = server / > < / li >
< / ItemTemplate >
< FooterTemplate >
< / ul >
< / FooterTemplate >
< / asp:Repeater >
< asp:GridView runat = 服务器 ID = gvProjects >
< >
< asp:TemplateField >
< HeaderTemplate >
< asp:标签 文本 = 项目否 runat = server / >
< br / >
< asp:TextBox runat = 服务器 ID = txtFilterProjID OnTextChanged = txtFilterProjID_TextChanged AutoPostBack = true / >
< < span class =code-leadattribute> / HeaderTemplate >
< ItemTemplate >
< asp:标签 文字 =' <% #Eval( 标题%> ' runat = server / >
< / ItemTemplate >
< / asp:TemplateField >
< /列 >
< / asp:GridView >
< / ContentTemplate >
< / asp:UpdatePanel >





返回结束代码:



使用System; 
使用System.Collections.Generic;
使用System.Data;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControls;
使用SafatES.SPIS.DAL.ProjectServer;
使用System.Configuration;
使用SPIS.DATA;

命名空间SPIS_Remake
{
公共部分类PSTest:System.Web.UI.Page
{
protected void Page_Load(object sender,EventArgs e)
{
PopulateStatusTypes();

使用(SPISDBOnlineEntities dc = new SPISDBOnlineEntities())
{
rptProjectStates.DataSource = dc.ProjectStatusTypes.ToList();
rptProjectStates.DataBind();
}
}

private void PopulateStatusTypes()
{
Uri pwaUri = new Uri(http://projects.safates.com:80 /);
SafatES.SPIS.DAL.ProjectServer.Project projects = new SafatES.SPIS.DAL.ProjectServer.Project(pwaUri,ConfigurationSettings.AppSettings [PSIUsername]。ToString(),ConfigurationSettings.AppSettings [PSIPassword]。 ToString(),ConfigurationSettings.AppSettings [PSIDomain]。ToString());

/ *填充分支* /
DataTable dtProjectStatus = Helpers.DynamicGetLookUpTable(SafatES-Clients);
DropDownList1.DataSource = dtProjectStatus;
DropDownList1.DataValueField =LT_STRUCT_UID;
DropDownList1.DataTextField =LT_VALUE_TEXT;
DropDownList1.DataBind();

SafatES.SPIS.DAL.ProjectServer.Helpers.DisposeClients();
}

protected void txtFilterProjID_TextChanged(object sender,EventArgs e)
{

}

protected void lbProjectStatus_Click(object sender,EventArgs e)
{
LinkBut​​ton lb =(LinkBut​​ton)sender;
使用(var dc = new SPISDBOnlineEntities())
{
gvProjects.DataSource =(来自dc.ViewProjects
中的projs,其中projs.ProjectStatusTypeName == lb.Text
选择projs)。ToList();
gvProjects.DataBind();
}
}


}
}

解决方案

< blockquote>首先将 UpdateMode =Always更改为UpdateMode =Conditional。



然后在转发器内注册Linkbutton Control以进行异步回发。



类似



 使用(SPISDBOnlineEntities dc =  new  SPISDBOnlineEntities())
{
rptProjectStates.DataSource = dc.ProjectStatusTypes.ToList( );
rptProjectStates.DataBind();
foreach (RepeaterItem ri in rptProjectStates.Items)
{
if (ri.ItemType == ListItemType.Item || ri.ItemType == ListItemType.AlternatingItem)
{
LinkBut​​ton lb = ri.FindControl ( lbProjectStatus as LinkBut​​ton;
ToolkitScriptManager1.RegisterAsyncPostBackControl(lb);
}
}
}


你好...

我终于成功了解决问题。我所要做的就是在绑定datagrid之后调用updatepanel的update方法。如果有人知道为什么必须这样做,请告诉我。非常感谢所有人:)


导入java.IO. *; 

public class 回答
{
public static void main( String [] args)
{
System.out.println( Helo World!);
}
}


hey all,
long story short:
I have a few links that represent project categories. on each of the links click, a datagrid on the same page gets populated with appropriate data. I wanna use ajax functionality, I use .net framework 4.5 with entity framework 5. I placed the links and gridview both in the same update panel but the page still refreshes when i click on any of the links.
Please let me know if you want me to paste any code parts to aid you in pointing the problem.
Many thanks in advance :)

ASPX CODE:

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"></asp:ToolkitScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Always" ChildrenAsTriggers="true" runat="server">
            <ContentTemplate>
                <div>
        <asp:DropDownList ID="DropDownList1" runat="server" ></asp:DropDownList>
        <asp:TextBox ID="TextBox1" runat="server" TextMode="Date" />
    </div>
                <asp:Repeater runat="server" ID="rptProjectStates">
                    <HeaderTemplate>
                        <ul>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <li>
                            <asp:LinkButton ID="lbProjectStatus" Text='<%#Eval("ProjectStatusTypeName") %>' 



OnClick="lbProjectStatus_Click" runat="server" /></li>
                    </ItemTemplate>
                    <FooterTemplate>
                        </ul>
                    </FooterTemplate>
                </asp:Repeater>
                <asp:GridView runat="server" ID="gvProjects">
                    <Columns>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <asp:Label Text="Project No" runat="server" />
                                <br />
                                <asp:TextBox runat="server" ID="txtFilterProjID" OnTextChanged="txtFilterProjID_TextChanged" AutoPostBack="true" />
                            </HeaderTemplate>
                            <ItemTemplate>
                                <asp:Label Text='<%#Eval("Title") %>' runat="server" />
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ContentTemplate>
        </asp:UpdatePanel>



BACK END CODE:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SafatES.SPIS.DAL.ProjectServer;
using System.Configuration;
using SPIS.DATA;

namespace SPIS_Remake
{
    public partial class PSTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            PopulateStatusTypes();

            using (SPISDBOnlineEntities dc = new SPISDBOnlineEntities())
            {
                rptProjectStates.DataSource = dc.ProjectStatusTypes.ToList();
                rptProjectStates.DataBind();
            }
        }

        private void PopulateStatusTypes()
        {
            Uri pwaUri = new Uri("http://projects.safates.com:80/");
            SafatES.SPIS.DAL.ProjectServer.Project projects= new SafatES.SPIS.DAL.ProjectServer.Project(pwaUri, ConfigurationSettings.AppSettings["PSIUsername"].ToString(), ConfigurationSettings.AppSettings["PSIPassword"].ToString(), ConfigurationSettings.AppSettings["PSIDomain"].ToString());

            /* Populate Branches */
            DataTable dtProjectStatus = Helpers.DynamicGetLookUpTable("SafatES-Clients");
            DropDownList1.DataSource = dtProjectStatus;
            DropDownList1.DataValueField = "LT_STRUCT_UID";
            DropDownList1.DataTextField = "LT_VALUE_TEXT";
            DropDownList1.DataBind();

            SafatES.SPIS.DAL.ProjectServer.Helpers.DisposeClients();
        }

        protected void txtFilterProjID_TextChanged(object sender, EventArgs e)
        {

        }

        protected void lbProjectStatus_Click(object sender, EventArgs e)
        {
            LinkButton lb = (LinkButton)sender;
            using (var dc = new SPISDBOnlineEntities())
            {
                gvProjects.DataSource = (from projs in dc.ViewProjects
                                         where projs.ProjectStatusTypeName == lb.Text
                                         select projs).ToList();
                gvProjects.DataBind();
            }
        }

        
    }
}

解决方案

First Change the UpdateMode="Always" to UpdateMode="Conditional" .

Then register Linkbutton Control inside the repeater for Asynchronous postback.

Something like

using (SPISDBOnlineEntities dc = new SPISDBOnlineEntities())
            {
                rptProjectStates.DataSource = dc.ProjectStatusTypes.ToList();
                rptProjectStates.DataBind();
        foreach (RepeaterItem ri in rptProjectStates.Items)
                {
                    if (ri.ItemType == ListItemType.Item || ri.ItemType ==                          ListItemType.AlternatingItem)
                    {
                            LinkButton lb = ri.FindControl("lbProjectStatus") as LinkButton;
                            ToolkitScriptManager1.RegisterAsyncPostBackControl(lb);
                    }
                }
            }


hello all...
I have finally managed to solve the problem. All I had to do is to call the update method of the updatepanel after binding the datagrid. If anyone knows why that had to be done please let me know. Many thanks to all :)


Import java.IO.*;

public class Answer
{
public static void main(String[] args)
{
System.out.println("Helo World!");
}
}


这篇关于asp.net ajax无法正常工作,页面仍然刷新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆