|
Hi friends,
I am working on Web Application using C#. How can i send the post data(The data may have an object of a class) from one page to the next page.
I did't find in Request.Forword(), Server.Transfer() methods. In Java we
have RequestDispatcher class. Can i know what is the similar thing in C#.
If there is no class like this, please let me know the alternative solution.
I want, the end user should not get the URL/Query Parameters of the next page
in the Address Bar of his Browser.
Is it possible
Thanks,
Murthy.
-- modified at 23:28 Tuesday 29th November, 2005
|
|
|
|
|
|
Dear Ankit,
This is ok. But how can i send the post data to the other page at sever side.
And also receiving Post data in the Current Page.
I think Request.QueryString[....] does't help to us.
If my question is not clear, i will give you an example later.
Thanks,
Murthy.
|
|
|
|
|
Response.Redirect("/cldetail.aspx?bid=" + id + "&mail=" + email);
and cldetail page
public string clmail; //for taking emailid coming from status.aspx or link
public int id;
clmail=Request.QueryString["mail"].ToString();
id = int.Parse(Request.QueryString["bid"].ToString());
if am not understanding even now send me the example
see this example this may help u
Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
' Fires at the beginning of each request
Dim Context As HttpContext = HttpContext.Current
Dim oldpath As String = Context.Request.Path.ToLower()
Dim lastpath() As String = Split(oldpath, "/")
Dim laname As String = lastpath.GetValue(lastpath.Length - 2)
Dim token As String = "/category/"
Dim i As Integer = oldpath.IndexOf(token)
Dim len As Integer = token.Length
If i <> -1 Then
Dim j As Integer = oldpath.IndexOf("/index.aspx")
If j <> -1 Then
Dim strName As String = oldpath.Substring(i + len, j - (i + len))
Dim id As Integer
id = database.getId(laname)
Dim navpath() As String = database.navigation(id)
Dim Newpath As String = oldpath.Replace(token & strName & "/index.aspx", "/user/home.aspx?action=1&cid=" & id)
Context.RewritePath(Newpath)
End If
End If
token = "-"
i = oldpath.IndexOf(token)
Dim proIndex As Integer = oldpath.IndexOf("/category")
len = token.Length
If i <> -1 Then
Dim j As Integer = oldpath.IndexOf(".aspx")
If j <> -1 Then
Dim strLid As String = oldpath.Substring(i + len, j - (i + len))
Dim strold As String = oldpath.Substring(proIndex, i - proIndex) & "-"
Dim NewLidpath As String
NewLidpath = oldpath.Replace(strold & strLid & ".aspx", "/user/moreinfo.aspx?lid=" & strLid)
Context.RewritePath(NewLidpath)
End If
End If
token = "/type/"
i = oldpath.IndexOf(token)
len = token.Length
If i <> -1 Then
Dim j As Integer = oldpath.IndexOf(".aspx")
If j <> -1 Then
Dim strName As String = oldpath.Substring(i + len, j - (i + len))
Dim typepath As String
typepath = oldpath.Replace(token & strName & ".aspx", "/user/type.aspx?ptype=" & strName)
Context.RewritePath(typepath)
End If
End If
End Sub
Ankit Aneja
"Nothing is impossible. The word itself says - I M possible"
|
|
|
|
|
Hi Ankit,
This is my Example.
Consider an object of an Employee that have 200 or more
Data Members EmpNo, EmpName......
The Page1 (Employee Form) has 20 input fields.
Once the User filled the 20 input fields, I will send this object to the Business Component which is in the Business Logic.
After i processed this data object (i.e filling remaining
fields in the EmpObj using some logic), I will send back EmpObj to the same code behind of the Page1 from the Business Component.
Now, all the fields in the EmpObj has some data.
Next the end user should have a conformation page 'Page2' with some more additional readonly fields than Page1.
So what i want is, it is enough to send 'EmpObj' from Code Behind of
the Page1 to Page2 instead of sending
page2.aspx?EmpNo=1&EmpName=Murthy&CmpName=Symbiosys.... like that.
In the same way i have to catch the EmpObj in the Code Behind of the Page2 with 1-10 lines of code.
Please don't mine, i am asking like this. Because I am new in ASP.Net C#.
The above scenario is possible in Java by using RequestDispatcher class in servlet and
Employee empObj = (Employee) Request.getAttribute('EmpObj")
in JSP Pages.
Still if it is not clear, I will try to explain in some more detail.
Thanks and Best Wishes.
Murthy.
|
|
|
|
|
Server.Transfer method
End the current Web form and begin executing a new Web form. This method works only when navigating to a Web Forms page (.aspx).
Using the Transfer Method
Using the Transfer method is similar to executing a hyperlink or using the Redirect method, with one difference: Transfer can retain some information from the source page across requests. Setting the Transfer method’s preserveForm argument to True makes the form’s QueryString, ViewState, and event procedure information available in the destination form.
To be able to read one Web form’s ViewState from another, you must first set the EnableViewStateMac attribute in the Web form’s Page directive to False. By default, ASP.NET hashes ViewState information, and setting this attribute to False disables that hashing so that the information can be read on the subsequent Web form. The following line shows how to disable hashing so that a page’s ViewState can be used from another page:
Visual Basic .NET
<%@ Page language="vb" EnableViewStateMac="false"
Codebehind="RedirectNTransfer.aspx.vb"
Inherits="MCSDWebAppsVB.Transfer1" %>
Visual C#
<%@ Page language="c#" EnableViewStateMac="false"
Codebehind="RedirectNTransfer.aspx.cs" AutoEventWireup="false"
Inherits=" MCSDWebAppsVB.Transfer2" %>
The following event procedure for an ImageButton control shows how information can be passed between forms with the Transfer method:
Visual Basic .NET
' Transfer1.aspx
Private Sub imgTransfer_Click(ByVal sender As System.Object, _
ByVal e As System.Web.UI.ImageClickEventArgs) _
Handles imgTransfer.Click
' Transfer to another form, retaining ViewState.
Server.Transfer("Transfer2.aspx", True)
End Sub
Visual C#
// Transfer1.aspx
private void ImageButton1_Click(object sender,
System.Web.UI.ImageClickEventArgs e)
{
// Transfer to another form, retaining ViewState.
Server.Transfer("Transfer2.aspx", true);
}
WARNING
ASP.NET hashes ViewState information to prevent malicious users from manually changing the information passed back to the server and thus somehow corrupting data stored there. Disabling this hashing decreases the security of your Web application.
Use the Request object’s Form method to retrieve the ViewState information from the source Web form. The following code displays the values of two controls from the Transfer1.aspx Web form after the preceding Transfer method executes:
Visual Basic .NET
' Transfer2.aspx
Private Sub Page_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim colForm As _
System.Collections.Specialized.NameValueCollection
' Get data from source Web form.
colForm = Request.Form
' Display the value from Webform1's TextBox.
Response.Write("TextBox1.Text: " & _
colForm.Item("TextBox1") & " ")
' Display the x, y coordinates of where the click occurr ed.
Response.Write("ImageButton X, Y coords: " & _
colForm.Item("imgTransfer.x") & ", " & _
colForm.Item("imgTransfer.y") & " ")
End Sub
Visual C#
// Transfer2.aspx
private void Page_Load(object sender, System.EventArgs e )
{
System.Collections.Specialized.NameValueCollection c olForm;
// Get data from the source Web form.
colForm = Request.Form;
// Display the value from Webform1's TextBox.
Response.Write("TextBox1.Text: " + colForm["TextBox1"]
+ " ");
// Display the X, Y coordinated of where the click occurred.
Response.Write("ImageButton X, Y coords: " +
colForm["imgTransfer.x"] + ", " + colForm["imgTransfer.y"]
+ " ");
}
NOTE
The Server object’s Transfer and Execute methods work exclusively with Web forms. Trying to navigate to an HTML page using one of these methods results in a run-time error.
you can also store information in cookies
Well brother I am also new its a place to learn up together
Ankit Aneja
"Nothing is impossible. The word itself says - I M possible"
|
|
|
|
|
I'm a member of a small (3 men) company, developing new .NET app "from garage". This app took over two years of development and now it's time to release it.
But the last question before releasing the final version is: Do we need more code protection?
How should the answer sound?
1) Yes - we have to buy some VERY EXPENSIVE code protector, like Xheo or Salamander. -gulp- But, we can't buy such a product without profit from the first release - a problem.
2) No - we can release all the MSIL code and don't care about "bad boys"
3) No - we can publish some source code (even if the application is commercial), either. There are still "good boys", which tell us, where are the security bugs in our code
Which answer is right?
|
|
|
|
|
Depends on what the app does, and how wide it's market is. If I was, for example, about to release Microsoft Office, I'd want to obsfucate. We do a product into a niche market, which is not very technical, we don't bother to obsfucate it.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
Thanks for your reply.
Well, it's an imaging app aimed on digital photography. The market we want to enter is quite small, but we don't kknow if there is something to be afraid of.
|
|
|
|
|
ltinka wrote: No - we can publish some source code (even if the application is commercial), either. There are still "good boys", which tell us, where are the security bugs in our code
An obfuscator can hide bad code. Make sure your code is public ready before selling it, else you might land up on the dailywtf.com
xacc.ide-0.1 released! Download and screenshots
|
|
|
|
|
Imaging application implies you might have some algorithmic stuff in there the workings of which you'd like to keep to yourself. I would if it were a commercial venture anyway. It's a bit of a nightmare really because its really is so simple to pull apart a .NET assembly and leech its contents. If you haven't done so already take a look at Lutz Roeder's .Net Reflector (http://www.aisto.com/roeder/dotnet/[^]) as a means to reconstruct your source - it's depressingly easy.
I don't see the need to protect the general framwork of an application - anyone can recreate this, but the algorithmics I see a bit differently - have you considered providing these in non-managed code?
Regards,
Rob Philpott.
|
|
|
|
|
|
While calling the SqlTransaction method Rollback(), I'm getting a SqlException for Timeout Expired. I've looked all over the SqlTransaction class and don't see a way to set a timeout value for the Rollback command. Does anyone know how to increase the timeout value for this command?
|
|
|
|
|
Hi Mark,
I am not sure.it can be related to the timeout of the sqlcommand instead of sql transaction class.
rakesh
|
|
|
|
|
Hi,
Can any one tell me how to override the System.Windows.Forms.Label.CanSelect property?
Thanks!
Anne
|
|
|
|
|
Why would you want to? Selecting a label control at run-time isn't what I would call an intuitive thing to do.
The property just returns the value of the controls ControlStyles "Selectable" value. If you want to change this so the control is selectable, you'll have to create you're own Label control, inheriting from Label, and just set its Selectable ControlStyle to true.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you so much for your response, Dave.
Sorry for being so dumb...
Here is the inherited label we want selectable, could you show me how I would do it:
Thanks for any help you can give.
Anne
<br />
using System;<br />
using System.Collections;<br />
using System.ComponentModel;<br />
using System.Drawing;<br />
using System.Data;<br />
using System.Windows.Forms;<br />
using System.Configuration;<br />
<br />
namespace Arb.Controls.Win<br />
{<br />
public class arbTextLabel : System.Windows.Forms.Label<br />
{<br />
private System.ComponentModel.Container components = null;<br />
<br />
public arbTextLabel()<br />
{<br />
InitializeComponent();<br />
<br />
<br />
}<br />
<br />
protected override void Dispose( bool disposing )<br />
{<br />
if( disposing )<br />
{<br />
if(components != null)<br />
{<br />
components.Dispose();<br />
}<br />
}<br />
base.Dispose( disposing );<br />
}<br />
<br />
#region Component Designer generated code<br />
private void InitializeComponent()<br />
{<br />
components = new System.ComponentModel.Container();<br />
}<br />
#endregion<br />
public override Font Font<br />
{<br />
get<br />
{<br />
return getFont();<br />
}<br />
}<br />
<br />
public override Color ForeColor<br />
{<br />
get<br />
{<br />
return getForeColor();<br />
}<br />
}<br />
<br />
<br />
<br />
public Font getFont()<br />
{<br />
string N = ConfigurationSettings.AppSettings["TextLabelFontName"];<br />
string S = ConfigurationSettings.AppSettings["TextLabelFontSize"];<br />
string FS = ConfigurationSettings.AppSettings["TextLabelFontStyle"];<br />
string GU = ConfigurationSettings.AppSettings["TextLabelFontGraphicUnit"];<br />
string GRI = ConfigurationSettings.AppSettings["TextLabelFontGRI"];<br />
<br />
N = (N==null)?"Verdana":N;<br />
S = (S==null)?"9":S;<br />
FS = (FS==null)?"Regular":FS;<br />
GU = (GU==null)?"Point":GU;<br />
GRI = (GRI==null)?"0":GRI;<br />
<br />
return new System.Drawing.Font(N,(float)(Convert.ToDouble(S)),Helper.getFontStyle(FS),Helper.getGraphicUnit(GU),Convert.ToByte(GRI));<br />
}<br />
<br />
public Color getForeColor()<br />
{<br />
string r = ConfigurationSettings.AppSettings["TextLabelForeColorR"];<br />
string g = ConfigurationSettings.AppSettings["TextLabelForeColorG"];<br />
string b = ConfigurationSettings.AppSettings["TextLabelForeColorB"];<br />
<br />
r = (r==null)?"0":r;<br />
g = (g==null)?"0":g;<br />
b = (b==null)?"0":b;<br />
<br />
return System.Drawing.Color.FromArgb(Convert.ToByte(r),Convert.ToByte(g),Convert.ToByte(b));<br />
}<br />
}<br />
}<br />
<br />
<br />
|
|
|
|
|
AnneThorne wrote: public arbTextLabel()
{
// This call is required by the Windows.Forms Form Designer.
InitializeComponent();
// TODO: Add any initialization after the InitializeComponent call
}
public arbTextLabel()
{
InitializeComponent();
this.SetStyle(ControlStyles.Selectable, true);
this.UpdateStyles();
}
You're control will then be able to receive the input focus.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thank you very much Dave!
|
|
|
|
|
hi,
I am trying to call a dll fn that takes pointer to array as argument form my c# app.
I am doing the following way but its not working.
<br />
DISABLETOUCHSCREENDLL_API int fnDisableTouchScreenS(int *iscrn,int *iEnableDisable)<br />
{}<br />
<br />
[MarshalAs(UnmanagedType.LPArray)]<br />
private int[] iscrno = new int[MAX_SUPPORTED_SCR];<br />
[MarshalAs(UnmanagedType.LPArray)]<br />
private int[] iEnableDisable = new int[MAX_SUPPORTED_SCR];<br />
<br />
[DllImport( "DisableTouchScreenDLL.dll", CharSet = CharSet.Unicode )]<br />
public static extern int fnDisableTouchScreenS(ref int[] iscrno, ref int[] iEnableDisable);<br />
<br />
int[] s_nos = new int[MAX_SUPPORTED_SCR];<br />
int[] t_fs = new int[MAX_SUPPORTED_SCR];<br />
<br />
for(i=0;i<iScreens;i++)<br />
{<br />
s_nos[i] = i;<br />
t_fs[i] = 1;<br />
}<br />
iscrno = s_nos;<br />
iEnableDisable = t_fs;<br />
<br />
if(fnDisableTouchScreenS( ref iscrno, ref iEnableDisable)==0)<br />
{<br />
System.Console.Write("Success");<br />
}<br />
<br />
The function is returning success, but not doing what is expected.
But I know the dll is working fine...but am I using it right??
|
|
|
|
|
Try the following:
[DllImport("DisableTouchScreenDLL.DLL", CharSet = CharSet.Unicode)]
public static extern int fnDisableTouchScreenS(int * iscrno, int * iEnableDisable);
unsafe
{
fixed (int * ps_nos = s_nos, pt_fs = t_fs)
{
if (fnDisableTouchScreenS(ps_nos, pt_fs))
{
...
}
}
}
|
|
|
|
|
if the unsafe solution worked for you you should be able to use marshalling to pass in the arrays. Do a little research on passing c# int arrays to native dll functions. Good luck!!!
|
|
|
|
|
I've been trying to write to a MySQL db with no luck. Selecting the data and filling the dataSet is no problem. But everytime I try to update, delete or insert I get a concurrency violation. Am I just not mapping the columns correctly?
Database: address
Table: contacts
id int(11) not null auto_increment primary key
fname varchar(20)
lname varchar(20)
phone varchar(15)
Here's the code:
/*
* Created by SharpDevelop.
*
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Data.Odbc;
using System.Data.Common;
namespace mysql
{
/// <summary>
/// Description of MainForm.
/// </summary>
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.DataGrid dataGrid1;
private System.Windows.Forms.Button btnLoad;
//
//
private OdbcConnection cnn=new OdbcConnection(@"DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=address;USER=root;PASSWORD=system;OPTION=3");
private OdbcDataAdapter da=new OdbcDataAdapter();
private DataSet ds=new DataSet();
private OdbcCommand selectCmd=new OdbcCommand();
private OdbcCommand insertCmd=new OdbcCommand();
private OdbcCommand updateCmd=new OdbcCommand();
private OdbcCommand deleteCmd=new OdbcCommand();
//
//
void MainFormLoad(object sender, System.EventArgs e)
{
this.da.SelectCommand=this.selectCmd;
this.da.InsertCommand=this.insertCmd;
this.da.UpdateCommand=this.updateCmd;
this.da.DeleteCommand=this.deleteCmd;
//
//table mappings
//
this.da.TableMappings.AddRange(new DataTableMapping[]
{
new DataTableMapping("Table","contacts", new DataColumnMapping[]
{
new DataColumnMapping("id","id"),
new DataColumnMapping("fname","fname"),
new DataColumnMapping("lname","lname"),
new DataColumnMapping("phone","phone")
})
});
//
//select command
//
this.selectCmd.CommandText="select id,fname,lname,phone from contacts";
this.selectCmd.Connection=this.cnn;
//
//delete command
//
this.deleteCmd.CommandText="delete from contacts where (id=@id) and
(fname=@fname) and (lname=@lname) and (phone=@phone)";
this.deleteCmd.Connection=this.cnn;
this.deleteCmd.Parameters.Add("@id",OdbcType.Int,4,"id");
this.deleteCmd.Parameters.Add("@fname",OdbcType.VarChar,20,"fname");
this.deleteCmd.Parameters.Add("@lname",OdbcType.VarChar,20,"lname");
this.deleteCmd.Parameters.Add("@phone",OdbcType.VarChar,15,"phone");
//
//insert command
//
this.insertCmd.CommandText="insert into contacts(fname,lname,phone)
values(@fname,@lname,@phone)";
this.insertCmd.Parameters.Add("@id",OdbcType.Int,4,"id");
this.insertCmd.Parameters.Add("@fname",OdbcType.VarChar,20,"fname");
this.insertCmd.Parameters.Add("@lname",OdbcType.VarChar,20,"lname");
this.insertCmd.Parameters.Add("@phone",OdbcType.VarChar,15,"phone");
this.insertCmd.Parameters["@id"].SourceVersion=DataRowVersion.Original;
}
void BtnLoadClick(object sender, System.EventArgs e)
{
this.cnn.Open();
this.da.SelectCommand=this.selectCmd;
this.da.Fill(ds);
this.cnn.Close();
//
this.dataGrid1.DataSource=ds;
this.dataGrid1.DataMember="contacts";
}
}
}
|
|
|
|
|
like, asp:panel, or asp:button, so that i can change the background image or play a sound or something.
You can have the mouse cursor change so there has to be something.
|
|
|
|
|
You'd be better off asking this question in the ASP.NET or Web Developement forums.
You can't do this with server-side code. It'll have to be done in either HTML or client-side JavaScript.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|