Issue in parsing HTML table to ASP.NET - c#

I am using HtmlAgilityPack to parse a table on html page to ASP.NET but I am getting exception every time.
Code for ASP.NET Page:
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="httprequest_web.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<hr />
<br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" MaxLength="6" TextMode="Number"></asp:TextBox>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Label ID="Label3" runat="server" Text="Label" Visible="False"></asp:Label>
<hr />
<br />
<asp:Label ID="Label4" runat="server" Text="Label" Visible="False"></asp:Label>
<br />
</div>
</form>
</body>
</html>
CS Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using Newtonsoft.Json;
using HtmlAgilityPack;
namespace httprequest_web
{
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
{
Label1.Text = "Train Running Status/ JSON Output";
Label2.Text = "Please enter Train No.:";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//Generation of HTTP request from the train number specified in text box.
try
{
Label3.Visible = false;
//get request
string base_url = "http://railenquiry.in/runningstatus/";
string url_request = string.Concat(base_url, TextBox1.Text);
//using HtmlAgilityPack
WebClient rq = new WebClient();
string getdata = rq.DownloadString(url_request);
HtmlAgilityPack.HtmlDocument rec_data = new HtmlAgilityPack.HtmlDocument();
rec_data.LoadHtml(getdata);
List<List<string>> table = rec_data.DocumentNode.SelectSingleNode("//table[#class='table table-striped table-vcenter table-bordered table-responsive']")
.Descendants("tr").Where(tr => tr.Elements("td").Count() >= 1).Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList()).ToList();
}
catch
{
Label3.Visible = true;
Label3.Text = "Something went wrong. Please try again!";
}
}
}
}
HTML Page Source: Click Here
I am trying to parse running status information to display it on my webpage but every time I am getting an null object exception. Please tell me where I am doing it wrong. Thanks in advance!

HttpClient client = new HttpClient();
var html = await client.GetStringAsync("http://railenquiry.in/runningstatus/12736");
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
//Same as in your question
var table = doc.DocumentNode.SelectSingleNode("//table[#class='table table-striped table-vcenter table-bordered table-responsive']");
var result = table.Descendants("tr")
.Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList())
.Skip(1) //Skip headers
.Where(x => x.Count==11) //Skip the footer row
.ToList();
result will be List<List<string>> as you expect in your question.

Related

I need to let the user update the data entered into textbox to be reflected back to the specific user's detail into database

My query now is that I have developed a user homepage using session variables which will be holding the user's name and user's Email and show these sessions into the homepage aspx page, now I need to let the specific user edit and update the registered email and after updating it the database also need to get updated with the new email field values for that specific user. Now in the database I have a table called tblcontacts which holds four columns as name,fname,E-mail and studentID. Please help me, how do I locate and select the concerned row to update the details using LINQ query code.
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="Homepage.aspx.cs" Inherits="WebApplication5.Homepage" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<br />
<h1> Welcome! </h1>
<p> <img src="user.jpg" /></p>
<asp:Label ID="lblName" runat="server" Text="Label"></asp:Label>
<br />
<br />
Your Registered e-mail is:
<asp:Label ID="lblmail" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Edit" />
New-Email :
<asp:TextBox ID="TextBox1" runat="server" Visible="False"></asp:TextBox>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="Wrong Format!" ForeColor="Red" ValidationExpression="\w+([-+.']\w+)*#\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>
<br />
<br />
<br />
<br />
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication5
{
public partial class Homepage : System.Web.UI.Page
{
public static int check = 0;
DataClasses1DataContext db = new DataClasses1DataContext();
protected void Page_Load(object sender, EventArgs e)
{
lblName.Text = Session["name"].ToString();
lblmail.Text = Session["email"].ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
tblContact tb = new tblContact();
check += 1;
if (check % 2 == 0)
{
tb.Email = TextBox1.Text;
TextBox1.Visible = false;
Button1.Text = "edit";
db.SubmitChanges();
}
else
{
TextBox1.Visible = true;
Button1.Text = "Update";
}
}
}
}
After Doing Some Investigation for the desired code finally i fixed this by removing the line in code as tb.email = textbox1.text and after adding following two lines of code in button click event handler function :
protected void Button1_Click(object sender, EventArgs e)
{
tblContact tb = new tblContact();
check += 1;
if (check % 2 == 0)
{
var student = (from c in db.tblContacts where c.name == lblName.Text select c).Single();
student.Email = TextBox1.Text;
TextBox1.Visible = false;
Button1.Text = "edit";
db.SubmitChanges();
}
else
{
TextBox1.Visible = true;
Button1.Text = "Update";
}
}
The single method here in LINQ query made it work to select the desired row in the table for which the details are to be updated!This answer has to be marked correct,as this solved by query

Use asp.net button onclick method instead of submitting form

I have an asp.net Button control which I want to use to insert comments in my page. When i click on button, I want it to call a method instead of submitting the form. How do i achieve this?
This is what i have tried so far -
<%# Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
//Do some stuff here
}
</script>
<head>title and other css links go here</head>
<body>
<form id="form1" runat="server" onsubmit="false">
//Some other asp.net controls go here
<asp:Button ID="Button1" runat="server" Text="Comment" OnClick="Button1_Click"/>
</form>
</body>
</html>
Is there any other way to achieve what I am doing? Suggestions are welcome.
I don't really know exactly what you are meaning.... I think you are asking for how to insert a comment into an aspx via a shout box???... Maybe?
Here is the code to insert whatever you want to type(a comment) into your form from a "method"... although it uses a lot more than just a single method.. this is the simplest way I can think of...
This is your default.aspx (notice no master page here)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>AJAX Example for comment</title>
<link href="Main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div id="page">
<div id="main">
<div id="shoutbox">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<p>Here's what everyone is saying:</p>
<p>
<asp:UpdatePanel ID="ShoutBoxPanel1" runat="server">
<ContentTemplate>
<asp:Label ID="lblShoutBox" runat="server"></asp:Label>
<asp:Timer ID="Timer1" runat="server" Interval="5000">
</asp:Timer>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddShout"
EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</p>
<p>
<asp:UpdatePanel ID="ShoutBoxPanel2" runat="server"
UpdateMode="Conditional">
<ContentTemplate>
<p class="label">Name:</p>
<p class="entry">
<asp:TextBox ID="txtUserName" runat="server"
MaxLength="15" Width="100px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1"
runat="server" ErrorMessage="Name is required."
ControlToValidate="txtUserName" Display="Dynamic"
CssClass="error">
</asp:RequiredFieldValidator>
</p>
<p class="label">Shout:</p>
<p class="entry">
<asp:TextBox ID="txtShout" runat="server"
MaxLength="255" Width="220px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2"
runat="server" ErrorMessage="Shout is required."
ControlToValidate="txtShout" Display="Dynamic"
CssClass="error">
</asp:RequiredFieldValidator>
</p>
<asp:Button ID="btnAddShout" runat="server" Text="Add Shout"
onclick="btnAddShout_Click" />
<asp:UpdateProgress ID="UpdateProgress1" runat="server"
DynamicLayout="False">
<ProgressTemplate>
<img src="Images/spinner.gif" alt="Please Wait" />
Comment...
</ProgressTemplate>
</asp:UpdateProgress>
</ContentTemplate>
</asp:UpdatePanel>
</p>
</div>
</div>
</div>
</form>
</body>
</html>
And this is your C# Code
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ShoutItemList shoutBox;
if (Application["ShoutBox"] == null)
{
shoutBox = new ShoutItemList();
Application.Add("ShoutBox", shoutBox);
}
else
{
shoutBox = (ShoutItemList)Application["ShoutBox"];
lblShoutBox.Text = shoutBox.Display();
}
if (ScriptManager1.IsInAsyncPostBack != true)
txtUserName.Focus();
}
protected void btnAddShout_Click(object sender, EventArgs e)
{
ShoutItem shout = new ShoutItem();
shout.UserName = txtUserName.Text;
shout.Comment = txtShout.Text;
shout.Timestamp = DateTime.Now;
Application.Lock();
ShoutItemList shoutBox = (ShoutItemList)Application["ShoutBox"];
shoutBox.Add(shout);
Application.UnLock();
lblShoutBox.Text = shoutBox.Display();
txtShout.Text = "";
txtShout.Focus();
}
}
public class ShoutItem
{
public string UserName { get; set; }
public DateTime Timestamp { get; set; }
public string Comment { get; set; }
}
public class ShoutItemList
{
private List<ShoutItem> shoutList = new List<ShoutItem>();
private void Purge()
{
DateTime purgeTime = DateTime.Now;
purgeTime = purgeTime.AddMinutes(-3);
int i = 0;
while (i < shoutList.Count)
{
if (shoutList[i].Timestamp <= purgeTime) shoutList.RemoveAt(i);
else i += 1;
}
}
public void Add(ShoutItem shout)
{
Purge();
System.Threading.Thread.Sleep(2000);
shoutList.Insert(0, shout);
}
public string Display()
{
Purge();
StringBuilder shoutBoxText = new StringBuilder();
if (shoutList.Count > 0)
{
shoutBoxText.AppendLine("<dl>");
foreach (ShoutItem shout in shoutList)
{
shoutBoxText.Append("<dt>" + shout.UserName + " (");
shoutBoxText.Append(shout.Timestamp.ToShortTimeString() + ")</dt>");
shoutBoxText.AppendLine("<dd>" + shout.Comment + "</dd>");
}
shoutBoxText.AppendLine("</dl>");
}
return shoutBoxText.ToString();
}
}
This will allow you to insert whatever comment you want. You can modify this code to your own please....
Let me know if this is the answer you seek.
Use the button's OnClientClick, like this:
<asp:Button ID="Button1" runat="server" Text="Comment" OnClientClick="return javascriptFunction();" OnClick="Button1_Click"/>
then your javascript function would look like this
function javascriptFunction() {
//do something here
return false; //if you don't want the form to POST to the server, leave this as false, otherwise true will let it continue with the POST
}

Label does not exist in the current context of asp.net page and ajax control

before I begin, there is another question with a similar title and it is unsolved but my situation is pretty different since I am using Ajax.
I recently added a label to my Ajax UpdateProgress control and for some reason my asp.net page is not reading it. My original goal was for the text of the label to be constantly be updating while the long method runs. I am using code behind, and I believe the label is declared. I will post my .cs page if anyone would like to read through it (its not too long), All my other labels work perfectly and even if I take the label OUT of the ajax control it will work fine (not the text updates though). Is there a certain Ajax label I need to use?
Im pretty confused why the error is occurring. The exact error message states : "The name 'lblProgress' does not exist in the current context. Im using c#, ajax controls, a asp.net page, and visual studio. This program uploads a file to a client and stores the information in a database. If anyone can help I would really appreciate it. Thanks in advance!
using System;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Net;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Threading;
public partial class SendOrders : System.Web.UI.Page
{
protected enum EDIType
{
Notes,
Details
}
protected static string NextBatchNum = "1";
protected static string FileNamePrefix = "";
protected static string OverBatchLimitStr = "Batch file limit has been reached. No more batches can be processed today.";
protected void Page_Load(object sender, EventArgs e)
{
Initialize();
}
protected void Page_PreRender(object sender, EventArgs e)
{
}
protected void Button_Click(object sender, EventArgs e)
{
PutFTPButton.Enabled = false;
lblProgress.Visible = true;
lblProgress.Text = "Preparing System Checks...";
Thread.Sleep(3000);
Button btn = (Button)sender;
KaplanFTP.BatchFiles bf = new KaplanFTP.BatchFiles();
KaplanFTP.Transmit transmit = new KaplanFTP.Transmit();
if (btn.ID == PutFTPButton.ID)
{
lblProgress.Text = "Locating Files...";
//bf.ReadyFilesForTransmission();
DirectoryInfo dir = new DirectoryInfo(#"C:\Kaplan");
FileInfo[] BatchFiles = bf.GetBatchFiles(dir);
bool result = transmit.UploadBatchFilesToFTP(BatchFiles);
lblProgress.Text = "Sending Files to Kaplan...";
if (!result)
{
ErrorLabel.Text += KaplanFTP.errorMsg;
return;
}
bf.InsertBatchDataIntoDatabase("CTL");
bf.InsertBatchDataIntoDatabase("HDR");
bf.InsertBatchDataIntoDatabase("DET");
bf.InsertBatchDataIntoDatabase("NTS");
List<FileInfo> allfiles = BatchFiles.ToList<FileInfo>();
allfiles.AddRange(dir.GetFiles("*.txt"));
bf.MoveFiles(allfiles);
lblProgress.Text = "Uploading File Info to Database...";
foreach (string order in bf.OrdersSent)
{
OrdersSentDiv.Controls.Add(new LiteralControl(order + "<br />"));
}
OrdersSentDiv.Visible = true;
OrdersInfoDiv.Visible = false;
SuccessLabel.Visible = true;
NoBatchesToProcessLbl.Visible = true;
BatchesToProcessLbl.Visible = false;
PutFTPButton.Enabled = false;
BatchesCreatedLbl.Text = int.Parse(NextBatchNum).ToString();
Thread.Sleep(20000);
if (KaplanFTP.errorMsg.Length != 0)
{
ErrorLabel.Visible = true;
SuccessLabel.Visible = false;
ErrorLabel.Text = KaplanFTP.errorMsg;
}
}
}
Here is my aspx code as well.
<%# Page Language="C#" AutoEventWireup="true" CodeFile="SendOrders.aspx.cs" Inherits="SendOrders" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>Kaplan EDI Manager</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.style1
{
width: 220px;
height: 19px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div class="mainPanel">
<div>
<h3>Number of Batches Created Today: <asp:Label runat="server" style="display:inline;" ID="BatchesCreatedLbl"></asp:Label>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<span class="red">COUNTDOWN TO SUBMISSION!</span>
<span id="timespan" class="red"></span>
</h3>
</div>
<div id="batchestoprocessdiv">
</div>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="BatchesToProcessLbl" runat="server" CssClass="green"
Height="22px" Text="THERE IS AN ORDER BATCH TO PROCESS."></asp:Label>
<asp:Label ID="NoBatchesToProcessLbl" runat="server" CssClass="red"
Text="There are no Order Batches to Process." Visible="false"></asp:Label>
<asp:Button ID="PutFTPButton" runat="server" onclick="Button_Click"
Text="Submit Orders" />
<asp:Label ID="SuccessLabel" runat="server" CssClass="green"
Text="Batch has been processed and uploaded successfully." Visible="false"></asp:Label>
<asp:Label ID="ErrorLabel" runat="server" CssClass="red" Text="Error: "
Visible="false"></asp:Label>
<asp:Label ID="lblProgress" runat="server" CssClass="green" Height="16px"
Text="Label" Visible="False"></asp:Label>
<br />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server"
AssociatedUpdatePanelID="UpdatePanel1">
<ProgressTemplate>
<br />
<img alt="" class="style1" src="images/ajax-loader.gif" />
</ProgressTemplate>
</asp:UpdateProgress>
</div>
<div id="OrdersInfoDiv" runat="server" visible="false">
<asp:GridView ID="BatchDetails" Caption="Details of orders ready to be sent" runat="server" AutoGenerateColumns="true"
CssClass="InfoTable" AlternatingRowStyle-CssClass="InfoTableAlternateRow" >
</asp:GridView>
</div>
<div id="OrdersSentDiv" class="mainPanel" runat="server" visible="false">
<h4>Sent Orders</h4>
</div>
</form>
<script src="js/SendOrders.js" type="text/javascript"></script>
</body>
</html>
If the Label is created inside the UpdateProgress control, then you will need to do something like this
((Label)upUpdateProgress.FindControl("lblProgress")).Text = "Uploading File...";
If the control is declared in markup and the code-behind doesn't recognize it, then your designer.cs file is probably out of sync. There are a few ways to fix this:
Close the form and reopen it, and remove and add lblProgress again
Add the Label to the designer.cs file manually
Here's how to add it manually:
/// <summary>
/// lblProgress control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Label lblProgress;
EDIT
Just noticed that you're putting the UpdatePanel in an UpdateProgress control, in which case you'll need to reference it using FindControl (like #Valeklosse) suggested.

The connection was reset in Upload Telerik

I code a example like telerik Upload demo but have the following error when submit(in FF):
The connection was reset.
The demo of telerik RadUpload is here
This is the code of .aspx file:
<%# Page Title="" Language="C#" MasterPageFile="~/MasterPage1.master" AutoEventWireup="true" CodeFile="Upload.aspx.cs" Inherits="Main_Upload" %>
<%# Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
<title>Upload file</title>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<telerik:RadScriptManager ID="rsmScriptManager" runat="server">
</telerik:RadScriptManager>
<telerik:RadProgressManager ID="rpmUploadFile" runat="server" />
<div style=" color:Green">Valid files(*.doc, *.docx, *.xls, *.xlsx, *.pdf)</div>
<telerik:RadUpload ID="rulFiles" runat="server" InitialFileInputsCount="2" MaxFileInputsCount="5" AllowedFileExtensions=".doc,.docx,.xls,.xlsx,.pdf">
</telerik:RadUpload>
<telerik:RadProgressArea runat="server" ID="rpaUpload"></telerik:RadProgressArea>
<asp:Button ID="btnUpload" runat="server" Text="Ok" OnClick="btnUpload_Click" />
<br />
<asp:Label ID="lblNoResults" runat="server" Visible="True">No uploaded file!</asp:Label>
<asp:Repeater ID="rptValidResults" runat="server" Visible="false">
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"FileName") %>(<%#DataBinder.Eval(Container.DataItem,"ContentLength").ToString() + " bytes" %>)<br />
</ItemTemplate>
</asp:Repeater>
<div style="color: red; padding-top: 40px;">Invalid files:</div>
<asp:Label id="lblNoInvalidResults" runat="server" Visible="True">No invalid files.</asp:Label>
<asp:Repeater ID="rptInvalidResults" runat="server" Visible="false">
<ItemTemplate>
File: <%#DataBinder.Eval(Container.DataItem,"FileName") %>(<%#DataBinder.Eval(Container.DataItem,"ContentLength").ToString() + " bytes" %>)<br />
Mime-type: <%#DataBinder.Eval(Container.DataItem,"ContentType") %>
</ItemTemplate>
</asp:Repeater>
And the code behind in *.cs file:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Web.UI;
public partial class Main_Upload : System.Web.UI.Page
{
protected void btnUpload_Click(object sender, EventArgs e)
{
BindValidResult();
BindInvalidResult();
}
private void BindValidResult()
{
if(rulFiles.UploadedFiles.Count > 0)
{
foreach (UploadedFile validFile in rulFiles.UploadedFiles)
{
var targetFolder = Server.MapPath(Commons.PAGER.UPLOAD_FOLDER);
validFile.SaveAs(Path.Combine(targetFolder,validFile.GetName()),true);
}
lblNoResults.Visible = false;
rptValidResults.Visible = true;
rptValidResults.DataSource = rulFiles.UploadedFiles;
rptValidResults.DataBind();
}
else
{
lblNoResults.Visible = true;
rptValidResults.Visible = false;
}
}
private void BindInvalidResult()
{
if(rulFiles.InvalidFiles.Count > 0)
{
lblNoInvalidResults.Visible = false;
rptInvalidResults.Visible = true;
rptInvalidResults.DataSource = rulFiles.InvalidFiles;
rptInvalidResults.DataBind();
}
else
{
lblNoInvalidResults.Visible = true;
rptInvalidResults.Visible = false;
}
}
}
Thanks!!!!
I'll go ahead and tell you with almost 100% certainty that the line that is causing this is:
var targetFolder = Server.MapPath(Commons.PAGER.UPLOAD_FOLDER);
It could be that you do not have permission to connect the server, or a variety of other issues.
To test this change "var targetFolder" to something like:
var targetFolder = #"C:\Users\j\Desktop\TEMP\"
Run this and it works perfectly, hence the idea that the path you're trying to access on the server is the problem.
Perhaps you should specify the path if possible. For example, if you are on a domain:
var targetFolder = #"\\server\Users\"
This would access that server and then the users folder therein that I have on my domain.

Displaying sourcecode when clicking a button

First I have to let you know that i am a newbie in this area, learning from tutorials.
With that said I'm looking for a way to load sourcecode from the codebehind file into a textbox, when clicking a button. Same goes for the aspx file.
Im making this website, where i am going to show code examples from what im doing. So if I navigate to myweb.com/tutorial1done.aspx this page would show me the final result from the tutorial done. When i click the show source button it should make 2 textboxes visible, and add the codebehind to the first box, and the aspx source to the second box.
I don't know if it is possible, but I am hoping so.
This far i have this:
ASPX:
<%# Page Language="C#" AutoEventWireup="true" CodeBehind="DateTimeOutput.aspx.cs" Inherits="WebApplication1.DateTimeOutput" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link rel="stylesheet" href="../styles/codeformatter.css" />
</head>
<body>
<form id="form1" runat="server">
<customControls:Header runat="server" heading="Date and Time Output" />
<div>
<asp:Panel ID="Panel1" runat="server">
<asp:TextBox ID="outputText" runat="server" Height="175px" TextMode="MultiLine"
Width="400px"></asp:TextBox>
</asp:Panel>
</div>
<asp:Panel ID="Panel2" runat="server">
<asp:Button ID="runButton" runat="server" Text="Run Code"
onclick="runButton_Click" Width="95px" />
<asp:Button ID="clearButton" runat="server" Text="Clear Console"
onclick="clearButton_Click" Width="95px" />
<br />
<br />
<asp:Button ID="dt_showSource_btn" runat="server"
onclick="dt_showSource_btn_Click" Text="Show Source" />
</asp:Panel>
<asp:Label ID="dtLabel1" runat="server" Text="Code Behind:" Visible="False"></asp:Label>
<br />
<asp:TextBox ID="dtcb_output" runat="server" Height="175px"
TextMode="MultiLine" Visible="False" Width="400px"></asp:TextBox>
<br />
<br />
<asp:Label ID="dtLabel2" runat="server" Text="ASPX:" Visible="False"></asp:Label>
<br />
<asp:TextBox ID="dtaspx_output" runat="server" Height="175px"
TextMode="MultiLine" Visible="False" Width="400px"></asp:TextBox>
</form>
</body>
</html>
And the Codebehind:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class DateTimeOutput : System.Web.UI.Page
{
protected void output(String value)
{
outputText.Text += value + Environment.NewLine;
}
protected void runButton_Click(object sender, EventArgs e)
{
DateTime dt = new DateTime();
output(dt.ToString());
DateTime nowDt = DateTime.Now;
output(nowDt.ToString());
}
protected void clearButton_Click(object sender, EventArgs e)
{
outputText.Text = "";
}
protected void dt_showSource_btn_Click(object sender, EventArgs e)
{
if (dtcb_output.Visible == false)
{
dtLabel1.Visible = true;
dtcb_output.Visible = true;
}
else
{
dtLabel1.Visible = false;
dtcb_output.Visible = false;
}
if (dtaspx_output.Visible == false)
{
dtLabel2.Visible = true;
dtaspx_output.Visible = true;
}
else
{
dtLabel2.Visible = false;
dtaspx_output.Visible = false;
}
}
}
}
For now source highlighting is not needed, unless its easy to do.
Thx in advance.
If you're refering to the actual code of your code behind file, you have a problem. As the file will be compiled and then be placed as intermediate code in a dynamic link library (.dll), you don't have access to the .aspx.cs file any more. The only way to go would be to include the code behind file with the deployd project and open it with a FileStream (or whatever) to read it and display it's content.

Categories

Resources