我正在使用与SharePoint的连接来加载列表项的应用程序。
我还使用动态表,因此用户可以添加新行。
我的页面是asp.net页面需要7秒多。我用萤火虫检查了这个。
以下是我的网页代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Client;
namespace AdminCareWeb
{
public partial class DocumentToevoegen : System.Web.UI.Page
{
#region globalevars
SharePointContextToken contextToken;
string accessToken;
Uri sharepointUrl;
string contextTokenString;
string logoHoofding;
int initNumRows = 15;
public string jsSharePointURL;
//Instanties aanmaken van de klasses
static List<TableRow> TableRows = new List<TableRow>();
static Dictionary<int, Artikels> dicArtikels = new Dictionary<int, Artikels>();
Document huidigDocument = new Document();
Klanten huidigeKlant = new Klanten();
#endregion
#region properties
private int numOfRows
{
get
{
if (ViewState["RowsCount"] == null)
{
return 0;
}
else
{
return (int)ViewState["RowsCount"];
}
}
set
{
ViewState["RowsCount"] = value;
}
}
#endregion
protected void Page_Load(object sender, EventArgs e)
{
try
{
string vorigePagina = Request.UrlReferrer.ToString();
//Controleer of de pagina gerefreshd werd of voor het eerst geladen wordt.
if (!vorigePagina.Contains("DocumentToevoegen.aspx"))
{
TableRows.Clear();
//Als de pagina voor de eerste keer geladen wordt moet de tabel leeggemaakt worden.
dicArtikels.Clear();
}
//Generate the Rows on Initial Load
if (!Page.IsPostBack && dicArtikels.Count == 0)
{
numOfRows = initNumRows;
Artikels artikel = new Artikels();
for (int i = 0; i < numOfRows; i++)
{
dicArtikels.Add(i, artikel);
}
}
GenerateTable(0, numOfRows);
//Controleer of security tokens al aanwezig zijn. Indien deze niet aanwezig zijn maak ze globaal aan.
if (PassThrough.contextTokenString != null)
{
ClientContext clientContext = ContextTokensOphalen();
jsSharePointURL = PassThrough.sharepointUrl.ToString();
}
else if (!IsPostBack)
{
Response.Write("Could not find a context token.");
return;
}
}
catch (Exception ex)
{
huidigDocument.log("DocumentToevoegen.aspx", "Page_Load", ex.Message.ToString());
}
}
protected void Page_LoadComplete(object sender, EventArgs e)
{
ClientContext clientContext = ContextTokensOphalen();
try
{
bool foutief = false; ;
string adresgegevens = "";
#region parameters ophalen
Parameters ledig = new Parameters();
ledig.ledigParameters();
huidigDocument.ParametersLookup(clientContext);
huidigDocument.Parameters1Tekstregel(clientContext);
huidigDocument.ParametersMeerdereTekstregels(clientContext);
huidigDocument.ParametersJaNeen(clientContext);
//Controleer of de bankgegevens ingevuld werden.
if (Parameters.Bankgegevens != null && !string.IsNullOrEmpty(Parameters.Bankgegevens))
{
foutief = false;
lblBankgegevens.Text = Parameters.Bankgegevens.Replace("\r\n", "<br />");
}
if (Parameters.Naam != null && !string.IsNullOrEmpty(Parameters.Naam))
{
foutief = false;
adresgegevens += Parameters.Naam + "<br>";
}
if (Parameters.Adres != null && !string.IsNullOrEmpty(Parameters.Adres))
{
foutief = false;
adresgegevens += Parameters.Adres + "<br>";
}
if (Parameters.Adres2 != null && !string.IsNullOrEmpty(Parameters.Adres2))
{
foutief = false;
adresgegevens += Parameters.Adres2 + "<br>";
}
if (Parameters.Postcode != null && !string.IsNullOrEmpty(Parameters.Postcode))
{
foutief = false;
adresgegevens += Parameters.Postcode;
}
if (Parameters.Plaats != null && !string.IsNullOrEmpty(Parameters.Plaats))
{
foutief = false;
adresgegevens += " " + Parameters.Plaats + "<br>";
}
if (Parameters.Telefoon != null && Parameters.Telefoon.Length > 3)
{
foutief = false;
adresgegevens += "Tel: " + Parameters.Telefoon + "<br>";
}
if (Parameters.GSM != null && Parameters.GSM.Length > 3)
{
foutief = false;
adresgegevens += "GSM: " + Parameters.GSM + "<br>";
}
if (Parameters.Fax != null && Parameters.Fax.Length > 3)
{
foutief = false;
adresgegevens += "Fax: " + Parameters.Fax + "<br>";
}
if (Parameters.Ondernemingsnummer != null && Parameters.Ondernemingsnummer.Length > 3)
{
foutief = false;
adresgegevens += "BTW " + Parameters.Ondernemingsnummer + "<br>";
}
if (Parameters.RPR != null && !string.IsNullOrEmpty(Parameters.RPR))
{
foutief = false;
adresgegevens += "RPR " + Parameters.RPR + "<br>";
}
if (Parameters.Website != null && !string.IsNullOrEmpty(Parameters.Website))
{
foutief = false;
adresgegevens += Parameters.Website + "<br>";
}
if (Parameters.Email != null && !string.IsNullOrEmpty(Parameters.Email))
{
foutief = false;
adresgegevens += Parameters.Email + "<br>";
}
if (Parameters.Logo != null && Parameters.LogoHoofding.ToString() == "")
{
foutief = false;
imgLogo.ImageUrl = Parameters.Logo;
imgLogo.Visible = true;
}
if (Parameters.LogoHoofding.ToString() != "")
{
logoHoofd.Style.Add("BACKGROUND-IMAGE", "url(" + Parameters.LogoHoofding + ");width:794px;");
foutief = false;
logoHoofding = Parameters.LogoHoofding;
imgLogo.Visible = false;
}
if (Parameters.Logovoet != null)
{
foutief = false;
imgVoet.ImageUrl = Parameters.Logovoet;
imgVoet.Visible = true;
imgVoet.Height = 140;
imgVoet.Width = 794;
}
if (!foutief) { lblAdresgegevens.Text = adresgegevens; }
#endregion
}
catch (Exception ex)
{
huidigDocument.log("DocumentToevoegen.aspx", "Page_Load", ex.Message.ToString());
}
if (!Page.IsPostBack)
{
//Huidige datum ophalen volgens het Belgisch formaat.
//Datum wordt gebruikt om de Documentdatum in te stellen en de vervaldatum.
DateTime dt = DateTime.Now;
txtDocumentDatum.Text = dt.ToString("dd-MM-yyyy");
dt = dt.AddDays(30);
txtVervaldatum.Text = Parameters.Vervaldatum;
ddlLand.SelectedValue = "20";
lblIntraCom.Text = "";
try
{
#region klanten ophalen
//Klanten invullen met de opgehaalde waardes uit een Dictionary
foreach (KeyValuePair<string, string> klant in huidigeKlant.KlantenOphalen())
{
string naam = klant.Value;
ddlKlant.Items.Add(new System.Web.UI.WebControls.ListItem(naam, naam));
}
#endregion
#region dagboeken ophalen
//Dagboeken invullen met de opgehaalde waardes uit een Dictionary
foreach (KeyValuePair<string, string> dagboeken in huidigDocument.Dagboeken())
{
//ddlDagboek.Items.Clear();
string ID = dagboeken.Key;
string omschrijving = dagboeken.Value;
ddlDagboek.Items.Add(new System.Web.UI.WebControls.ListItem(omschrijving, ID));
}
#endregion
#region postcodes ophalen
//Postcodes invullen met de opgehaalde waardes uit een Dictionary
foreach (KeyValuePair<string, string> postcode in huidigeKlant.Postcodes())
{
string ID = postcode.Key;
string gemeente = postcode.Value;
ddlGemeente.Items.Add(new System.Web.UI.WebControls.ListItem(gemeente, ID));
}
huidigDocument.DocumentNummerOpvragen(int.Parse(ddlDagboek.SelectedValue));
txtDocNr.Text = huidigDocument.documentCode + " / " + huidigDocument.huidigDocumentNummer;
#endregion
#region landen ophalen
//Landen invullen met de opgehaalde waardes uit een Dictionary
foreach (KeyValuePair<string, string> land2 in huidigeKlant.Landen())
{
string ID = land2.Key;
string land = land2.Value;
ddlLand.Items.Add(new System.Web.UI.WebControls.ListItem(land, ID));
}
huidigDocument.DocumentTitelOpvragen(int.Parse(ddlDagboek.SelectedValue));
lblDocumentTitel.Text = huidigDocument.documentTitel;
#endregion
}
catch (Exception ex)
{
huidigDocument.log("DocumentToevoegen.aspx", "Page_Load", ex.Message.ToString());
}
}
}
private void GenerateTable(int existing, int rowsCount)
{
try
{
//Alle data halen uit de PassThrough class om opnieuw een connectie te maken met SharePoint
ClientContext clientContext = ContextTokensOphalen();
Table table = Page.Form.FindControl("tblArtikels") as Table;
if (table == null)
{
table = new Table();
table.ID = "tblArtikels";
Page.Form.Controls.Add(table);
}
else
{
if (existing == 0)
{
table.Controls.Clear();
}
}
//The number of Columns to be generated
const int colsCount = 6;//You can changed the value of 3 based on you requirements
// Now iterate through the table and add your controls
for (int i = existing; i < rowsCount; i++)
{
if (!dicArtikels.ContainsKey(i))
{
Artikels artikel = new Artikels();
dicArtikels.Add(i, artikel);
}
TableRow row = new TableRow();
for (int j = 0; j < colsCount; j++)
{
TableCell cell = new TableCell();
//means the first column of the Table
if (j == 0)
{
cell.Width = 40;
//Create the CheckBox
CheckBox cb = new CheckBox();
// Set a unique ID for each CheckBox
cb.ID = "CheckBoxRow_" + i + "Col_" + j;
// Add the control to the FIRST TableCell
cell.Controls.Add(cb);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
//2de kolom
else if (j == 1)
{
cell.Width = 60;
//Create the TextBox
TextBox tb = new TextBox();
// Set a unique ID for each TextBox
tb.ID = "TextBoxRow_" + i + "Col_" + j;
tb.Width = 40;
tb.EnableViewState = true;
tb.EnableTheming = true;
// Add the control to the TableCell
cell.Controls.Add(tb);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
//Kolom 3
else if (j == 2)
{
cell.Width = 310;
cell.HorizontalAlign = HorizontalAlign.Right;
//Create the TextBox
TextBox tb = new TextBox();
// Set a unique ID for each TextBox
tb.ID = "TextBoxRow_" + i + "Col_" + j;
tb.Width = 290;
tb.EnableViewState = true;
tb.EnableTheming = true;
tb.TextMode = TextBoxMode.MultiLine;
// Add the control to the TableCell
cell.Controls.Add(tb);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
//Kolom 4
else if (j == 3)
{
cell.Width = 160;
cell.HorizontalAlign = HorizontalAlign.Right;
//Create the TextBox
TextBox tb = new TextBox();
// Set a unique ID for each TextBox
tb.ID = "TextBoxRow_" + i + "Col_" + j;
//tb.TextChanged += new EventHandler(txtArtikelPrijs_TextChanged);
tb.Width = 140;
tb.EnableViewState = true;
tb.EnableTheming = true;
// Add the control to the TableCell
cell.Controls.Add(tb);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
//Kolom 5
else if (j == 4)
{
cell.Width = 160;
cell.HorizontalAlign = HorizontalAlign.Right;
//Create the TextBox
TextBox tb = new TextBox();
// Set a unique ID for each TextBox
tb.ID = "TextBoxRow_" + i + "Col_" + j;
//tb.TextChanged += new EventHandler(txtArtikelPrijs_TextChanged);
tb.Width = 140;
tb.Enabled = false;
tb.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2");
tb.TabIndex = -1;
tb.EnableViewState = true;
tb.EnableTheming = true;
// Add the control to the TableCell
cell.Controls.Add(tb);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
//Kolom 6
else if (j == 5)
{
cell.HorizontalAlign = HorizontalAlign.Right;
cell.Width = 64;
//Create the TextBox
DropDownList ddl = new DropDownList();
// Set a unique ID for each TextBox
ddl.ID = "DropDownRow_" + i + "Col_" + j;
ddl.Width = 50;
ddl.TabIndex = -1;
ddl.EnableViewState = true;
ddl.EnableTheming = true;
ddl.Items.Clear();
//Lijst met artikelen ophalen en dropdown opvullen
List oListBTW = clientContext.Web.Lists.GetByTitle("Lijst BTWcodes");
clientContext.ExecuteQuery();
CamlQuery cQBTW = new CamlQuery();
cQBTW.ViewXml = "<View>"
+ "<Query>"
+ "</Query>"
+ "</View>";
Microsoft.SharePoint.Client.ListItemCollection btwListItem = oListBTW.GetItems(cQBTW);
clientContext.Load(btwListItem);
clientContext.ExecuteQuery();
foreach (Microsoft.SharePoint.Client.ListItem btwItem in btwListItem)
{
string btwcode = btwItem["bcCode"].ToString();
string btwpercentage = btwItem["bcBTW"].ToString();
ddl.Items.Add(new System.Web.UI.WebControls.ListItem(btwpercentage, btwcode));
}
if (i >= initNumRows && ddlBTWregime.Items.Count > 0)
{
if (ddlBTWregime.SelectedItem.Value == "Medecontractant" || ddlBTWregime.SelectedItem.Value == "intracom goederen" || ddlBTWregime.SelectedItem.Value == "intracom diensten")
{
ddl.Enabled = false;
ddl.SelectedItem.Text = "0";
ddl.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2");
}
else if (ddlBTWregime.SelectedItem.Value == "BTW 6%")
{
ddl.Enabled = false;
ddl.SelectedItem.Text = "6";
ddl.BackColor = System.Drawing.ColorTranslator.FromHtml("#F2F2F2");
}
else
{
ddl.Enabled = true;
ddl.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF");
}
}
// Add the control to the TableCell
cell.Controls.Add(ddl);
// Add the TableCell to the TableRow
row.Cells.Add(cell);
}
}
// And finally, add the TableRow to the Table
tblArtikels.Rows.Add(row);
}
//Sore the current Rows Count in ViewState
numOfRows = rowsCount;
}
catch (Exception ex)
{
huidigDocument.log("DocumentToevoegen.aspx", "Genereer tabel", ex.Message.ToString());
}
}
在.cs文件下面我用来从SharePoint获取列表项=&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Client;
namespace AdminCareWeb
{
public class Klanten
{
SharePointContextToken contextToken;
string accessToken;
string currentUser;
Uri sharepointUrl;
string contextTokenString;
Document logging = new Document();
#region props
public string KlantID { get; set; }
public string KlantNaam { get; set; }
public string KlantAdres { get; set; }
public string KlantAdres2 { get; set; }
public string KlantPostcode { get; set; }
public string KlantPlaats { get; set; }
public string KlantLand { get; set; }
public string KlantOndernemingsnummerVoorloopcode { get; set; }
public string KlantOndernemingsnummer { get; set; }
#endregion
//Lijst maken van alle landen uit de SharePoint lijst landen.
public Dictionary<string, string> Landen()
{
Dictionary<string, string> landenLijst = new Dictionary<string, string>();
try
{
contextToken = PassThrough.contextToken;
sharepointUrl = PassThrough.sharepointUrl;
accessToken = PassThrough.accessToken;
ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(sharepointUrl.ToString(), accessToken);
// Lijst met Landen ophalen en dropdown vullen
List oListLanden = clientContext.Web.Lists.GetByTitle("Lijst landen");
clientContext.ExecuteQuery();
CamlQuery cQLand = new CamlQuery();
cQLand.ViewXml = "<View><Query></Query></View>";
Microsoft.SharePoint.Client.ListItemCollection landListItem = oListLanden.GetItems(cQLand);
clientContext.Load(landListItem, items => items.Include(
item => item["ID"],
item => item["LDnaam"]));
clientContext.ExecuteQuery();
foreach (Microsoft.SharePoint.Client.ListItem landItem in landListItem)
{
string ID = landItem["ID"].ToString();
string landNaam = landItem["LDnaam"].ToString();
landenLijst.Add(ID, landNaam);
}
}
catch (Exception ex)
{
logging.log("Klanten.cs", "Landen ophalen", ex.Message.ToString());
}
return landenLijst;
}
//Lijst maken van alle postcodes uit de SharePoint lijst postcodes en gemeentes.
public Dictionary<string, string> Postcodes()
{
Dictionary<string, string> postcodesLijst = new Dictionary<string, string>();
try
{
contextToken = PassThrough.contextToken;
sharepointUrl = PassThrough.sharepointUrl;
accessToken = PassThrough.accessToken;
ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(sharepointUrl.ToString(), accessToken);
//Lijst met postcodes ophalen en dropdown opvullen
List oListPostcodes = clientContext.Web.Lists.GetByTitle("Lijst postcodes");
clientContext.ExecuteQuery();
CamlQuery cQPostcodes = new CamlQuery();
cQPostcodes.ViewXml = "<View>"
+ "<Query>"
+ "<OrderBy><FieldRef Name='PCgemeente'/></OrderBy>"
+ "</Query>"
+ "</View>";
//Lijst aanmaken met het resultaat van de uitgevoerde query.
Microsoft.SharePoint.Client.ListItemCollection postcodeListItem = oListPostcodes.GetItems(cQPostcodes);
clientContext.Load(postcodeListItem, items => items.Include(
item => item["ID"],
item => item["PCgemeente"]));
clientContext.ExecuteQuery();
foreach (Microsoft.SharePoint.Client.ListItem postcodeItem in postcodeListItem)
{
string ID = postcodeItem["ID"].ToString();
string gemeente = postcodeItem["PCgemeente"].ToString();
postcodesLijst.Add(ID, gemeente);
}
}
catch (Exception ex)
{
logging.log("Klanten.cs", "Postcodes ophalen", ex.Message.ToString());
}
return postcodesLijst;
}
//Lijst maken van alle landen uit de SharePoint lijst landen.
public Dictionary<string, string> KlantenOphalen()
{
Dictionary<string, string> klantenLijst = new Dictionary<string, string>();
try
{
contextToken = PassThrough.contextToken;
sharepointUrl = PassThrough.sharepointUrl;
accessToken = PassThrough.accessToken;
ClientContext clientContext = TokenHelper.GetClientContextWithAccessToken(sharepointUrl.ToString(), accessToken);
// Lijst met Landen ophalen en dropdown vullen
List oListKLanten = clientContext.Web.Lists.GetByTitle("Lijst Relaties");
clientContext.ExecuteQuery();
CamlQuery cQKlant = new CamlQuery();
cQKlant.ViewXml = "<View>"
+ "<Query>"
+ "<Where><Eq><FieldRef Name='RLtyperelatie' /><Value Type='Choice'>Klant</Value></Eq></Where>"
+ "<OrderBy><FieldRef Name='RLnaam'/></OrderBy>"
+ "</Query>"
+ "</View>";
Microsoft.SharePoint.Client.ListItemCollection klantListItem = oListKLanten.GetItems(cQKlant);
clientContext.Load(klantListItem, items => items.Include(
item => item["RLnaam"]));
clientContext.ExecuteQuery();
foreach (Microsoft.SharePoint.Client.ListItem klantItem in klantListItem)
{
string klantNaam = klantItem["RLnaam"].ToString();
klantenLijst.Add(klantNaam, klantNaam);
}
}
catch (Exception ex)
{
logging.log("Klanten.cs", "Klanten ophalen", ex.Message.ToString());
}
return klantenLijst;
}
}
}
任何人都有一些加快的建议。问题是现在需要7到8秒才能显示页面。回发需要3-5秒。