ASP.NET (C#) event to happen before printing - c#

I have a web form in ASP.Net with C# code behind. It's a simple thing, and I'm pretty new so I'm kind of stuck.
In the source code of the web form I have a button called "print" that looks like this:
<asp:Button ID="btnPrint" runat="server" onclientclick="window.print();" Text="Print" />
No problem. In the code behind I have this:
protected void btnPrint_Click(object sender, EventArgs e)
{
//get current Date/Time
string dateTime = DateTime.Now.ToLongDateString() + ", at " + DateTime.Now.ToShortTimeString();
//set it to labelDate
lblDate.Text = "Requested on " + dateTime;
}
So the problem is that when I hit the print button, the form prints before the code executes and stamps the label (lblDate.Text).
Soooo... my noob question is how to get that date/time stamp to process before the form prints?
Thanks for your advice.
Mark

My first instinct would be to ditch the server side event, and populate the time stamp with javascript before the print call.

Try something like this:
protected void btnPrint_Click(object sender, EventArgs e)
{
//get current Date/Time
string dateTime = DateTime.Now.ToLongDateString() + ", at " + DateTime.Now.ToShortTimeString();
//set it to labelDate
lblDate.Text = "Requested on " + dateTime;
ScriptManager.RegisterStartupScript(this, this.GetType(), "key", "window.print();", true);
}

Instead of calling a windows.print(), call a function that adds the Requested datetime.
That will do the work.

Related

Time Difference in asp.net C#

I am creating a quiz and I want to calculate the time a user spends on a particular section.I tried by calculating the difference between the page load time and the submit button click but as soon as the button is clicked the page refreshes(AutoPostBack=true) and the difference is zero. Is there a way I can calculate the time.
Below is the code for the following I am using.
protected void Page_Load(object sender, EventArgs e)
{
dtAlgebraLoad = DateTime.Now;
lblTime.Text = dtAlgebraLoad.ToString();
}
protected void btnAlgebraNext_Click(object sender, EventArgs e)
{
dtAlgebraNext = DateTime.Now;
//timeSpan = dtAlgebraNext.Subtract(dtAlgebraLoad);
Label1.Text = dtAlgebraNext.ToString();
//Cal time duration between page and button Click
}
You can store the value in Session but instead of that try to call javascript function on button click and implement the necessary logic in that function and bind the calculated difference to the label by using
document.getElementbyId("Label1")
Since web clients are very disconnected, I would store the Start Date/Time the user enters the section, then a LastActivity date on all subsequent calls when interacting with the section. This will allow you to see when the user last did something and when they started, giving you a duration, otherwise the duration may be left open ended.
Add a hidden field in aspx
<input type="hidden" runat="server" id="hdnStartTime">
I page load
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
hdnStartTime.Value = DateTime.Now;
}
}
Use hdnStartTime.Value to find difference.
Here is a pure JS solution to show the elapsed time (using jQuery to display it). Let this code run on page load. If you bind the result to an input tag, you can also post it back to the server.
The advantage is that the user always sees the currently elasped time.
var start = new Date();
setInterval(function() {
var msElapsed = new Date() - start;
var dateObj = new Date(msElapsed);
var elapsedTime = dateObj.toISOString().substr(11, 8);
$('#elapsedTimeDisplay').val(elapsedTime);
}, 1000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<label for="elapsedTimeDisplay">Elapsed time:</label>
<input id="elapsedTimeDisplay" type="text" readonly="readonly"/>
Try this
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
dtAlgebraLoad = DateTime.Now;
lblTime.Text = dtAlgebraLoad.ToString();
}
}

after adding querystring parameter to web application method fails

I have the following code that opens a hyperlink in a different frame from code behind using the function ClientScript.RegisterStartupScript. The hyperlink was priory retrieved from a database and assigned to a label.
public void OpenWindow()
{
Formview_CurrentSelectedProcess.DataBind();
string url = (Formview_CurrentSelectedProcess.FindControl("LabelLink") as Label).Text;
string s = "window.open('" + url + "', 'main');";
Test.Text = s;
ClientScript.RegisterStartupScript(this.GetType(), "script", s, true);
}
This works perfect. Then I implemented a Querystring on that page. The Request Parameter is passed correctly and the hyperlink is opened on Pageload the way I expected. BUT: the next time this method is called, the hyperlink that will be opened, is the one belonging to the record specified in the Querystring Parameter. I placed a label inside to check if the correct parameter 's' is passed to ClientScript.RegisterStartupScript() and it is!!!
The mistake occurs with that function in case that the page had been loaded with a Querystring Parameter (eg.aspx?ID=324) Loading that same page without that parameter works perfect.
What happens? Why is ClientScript.RegisterStartupScript returning the old result, although it's input parameter has changed?
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
PopulateRootLevel();
string GetID = Request.QueryString["ID"];
if (String.IsNullOrEmpty(GetID))
{
}
else
{
InputNodeToOpen.Text = GetID;
ButtonClick_transmit(button1, EventArgs.Empty);
InputNodeToOpen.Text ="";
IDNodesToBeOpened.Text = "";
}
}
Any hints on that?
Martin
OK. Found the mistake:
After placing all actions in the page_load method inside separate brackets it works. I thought they were already assigned to a no-post-back situation; but they were NOT. The brackets are needed. So it must be:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
PopulateRootLevel();
string GetStructure = Request.QueryString["Structure"];
if (String.IsNullOrEmpty(GetStructure))
{
}
else
{
InputNodeToOpen.Text = GetStructure;
ButtonClick_transmit(button1, EventArgs.Empty);
InputNodeToOpen.Text = "";
IDNodesToBeOpened.Text = "";
}
}
}

Preserving Button's Text on Postback

I can't for the life of me figure this out! What I want to do is on the first page load set the button's text and the label's text to the current time. However, when the user clicks the button, only the label's text is updated to the current time and the button's text remains the time of when the page first loaded. I know I can do this with Ajax but i know there is way to do it just using the IsPostBack method. Can anyone help me?
public partial class TestPage : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Button1.Text = "Initial Page Load Time: " + DateTime.Now.ToLongTimeString() + ". (Click to update current time in Label)";
Label1.Text = "Current Time: " + DateTime.Now.ToLongTimeString();
}
Add a HiddenField to your page, then change your code to;
protected void Page_Load(object sender, EventArgs e)
{
if ( !Page.IsPostBack ){
HiddenField1.Value = "Initial Page Load Time: " + DateTime.Now.ToLongTimeString() + ". (Click to update current time in Label)";
}
Button1.Text = HiddenField1.Value;
Label1.Text = "Current Time: " + DateTime.Now.ToLongTimeString();
}
The HiddenField value will be preserved on PostBack so you can set the button text from this.
Just add this before setting the text:
if (Page.IsPostBack)
return

On ASP.NET form submit it throws an Object reference not set to an instance of an object.

I have a simple email form written in ASP.NET with the logic in the codebehind file. It's all in C# (the logic that is...). Anyways, on page load I have the following:
protected void Page_Load(object sender, EventArgs e)
{
RequestorName.Text = Request.Form["UserName"].ToString();
RequestorTitle.Text = Request.Form["JobTitle"].ToString();
RequestorEmail.Text = Request.Form["Email"].ToString();
RequestorPhone.Text = Request.Form["Phone"].ToString();
RequestorAddress1.Text = Request.Form["Address"].ToString();
RequestorAddress2.Text = Request.Form["City"].ToString() + " " + Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();
}
This works great as it pulls the users information into a few fields so they don't have to fill everything out by hand.
My other 2 methods in the code behind:
protected void SubmitForm_Click(object sender, EventArgs e)
{
SendEmail();
}
protected void SendEmail()
{
try
{
//compose email and send
}
catch (Exception ex)
{
ErrorMessage.Text = "Error: " + ex.ToString();
}
}
On my form page the button code is this:
<center>
<asp:Button runat="server" Text="Submit" ID="Submit" OnClick="SubmitForm_Click" class="button red" />
</center>
The error occurs when I click the send button on the form that generates the email and sends it. I can remove the Page_Load code and works great but I'd like to keep it there so the user doesn't have to fill out as much information.
I've used my Google Fu and read a ton of threads/articles but can't seem to find the solution...
Thanks for any assistance.
Add check for IsPostBack:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
RequestorName.Text = Request.Form["UserName"].ToString();
RequestorTitle.Text = Request.Form["JobTitle"].ToString();
RequestorEmail.Text = Request.Form["Email"].ToString();
RequestorPhone.Text = Request.Form["Phone"].ToString();
RequestorAddress1.Text = Request.Form["Address"].ToString();
RequestorAddress2.Text = Request.Form["City"].ToString() + " " + Request.Form["State"].ToString() + ", " + Request.Form["Zip"].ToString();
}
}
Have you tried adding if (Page.IsPostBack == false) to your Page_Load event?
I assume that the Request.Form code comes from fields that the user has filled out, but without seeing the rest of your markup, I'm not sure why you'd have to re-assign values from the form to what appear to be other fields on the form.
Where specifically is the error occurring?
From your code, I'm assuming that you are posting to your email form from another page and passing the parameters across.
If that's the case then assuming your .Text are the page controls then you should look at containing the control fillers in an If(!IsPostback) {...} for the first loading of the page only. Then your email code can read from the local controls.
My guess is that the "Request.Form[..." items are probably the ones kicking back error on postback.
HTH
Dave

Confirm function in codebehind

I my application i am using ajax(Updatepanel).I am using the following code to show confirmation dialog box after finishing some update process in database. but it is not working for me.
Problem:
Confirmation box is not displaying.
code:
protected void imbtnUpdate_Click(object sender, ImageClickEventArgs e)
{
// Database process
string javaScript = "<script language=JavaScript>\n " + "if(confirm('Do you want to update
the files?'))window.location.href = \"Upload.aspx?ID=" + ID +
"&pt=Gm&page=Gms\"; else return false;\n" + "</script>";
RegisterStartupScript("imbtnUpdate_Click", javaScript);
}
this code is just register on the page the javascript that say... if(... bla bla bla)...
Where is the function ?
The RegisterStartupScript, is not going to set on imbtnUpdateClick, this code, and is not going to call it on Clicking the Update.
Also you must always return false, from the code I see.
Advice: You the view page source code, to see the generated html and see what this code do and then you understand whats the problem.
Try this in your code behind:
imbtnUpdate.Attributes.Add("onclick", "return ConfirmUpdate();");
Then put your script into a javascript function called ConfrimUpdate()
Are you using AJAX?
Because if your button is in an update panel, and if you are trying to add this startup script on a partial-postback you should register it by using ScriptManager.
protected void imbtnUpdate_Click(object sender, ImageClickEventArgs e)
{
// Database process
string javaScript = "<script language=JavaScript>\n " + "if(confirm('Do you want to update
the files?'))window.location.href = \"Upload.aspx?ID=" + ID +
"&pt=Gm&page=Gms\"; else return false;\n" + "</script>";
// RegisterStartupScript("imbtnUpdate_Click", javaScript);
ScriptManager.RegisterStartupScript(Page, Page.GetType(),"imbtnUpdate_Click", javaScript , true);
}

Categories

Resources