2016-11-21 4 views
0

Ich mag Bild zeichnen, basierend auf Benutzereingaben (Breite, Höhe, etc ...)Wie Werte zwischen ASPX- Form passieren und .ashx Handler

ich in ASPX-Seite meine Form habe, aber ich zeichne Bild mit Ashx Handler.

Ich habe einen Code, der ein Bild zeichnet, aber nur aus vordefinierten Werten.

Nun, was ich will, ist zu tun, um Werte aus meiner aspx Form

ASPX-

<span>Width</span> 
<asp:TextBox ID="input_width" Width="125" Text="600" runat="server" ClientIDMode="Static"></asp:TextBox><br/> 
<span>Height</span> 
<asp:TextBox ID="input_height" Width="125" Text="400" runat="server"></asp:TextBox> 

.ashx.cs

int width = 600; 
int height = 400; 

Bitmap bmp = new Bitmap(width, height); 

Graphics g = Graphics.FromImage((Image)bmp); 
g.FillRectangle(Brushes.Red, 0f, 0f, bmp.Width, bmp.Height); 

MemoryStream ms = new MemoryStream(); 
bmp.Save(ms, ImageFormat.Png); 

byte[] bajt = ms.ToArray(); 

context.Response.ContentType = "image/png"; 
context.Response.BinaryWrite(bajt); 
context.Response.Flush(); 

bereits versucht, diese

string _width = context.Request.QueryString.Get("input_width.Text"); 

     int __width = Convert.ToInt32(_width); 

Aber der Wert scheint

Some1 bitte helfen Sie mir null zu sein?

Vielen Dank!

UPDATE

<a href="ImageGen.ashx">Press here</a><br /> 
     <img src="ImageGen.ashx" width="600" height="400"/> 
+0

zeigen, wo Sie verwenden die Abfrage param. – mybirthname

+0

es ist in "öffentliche void ProcessRequest (HttpContext Kontext)" @mybirthname – aiden87

+0

Ich meine in der aspx, wo Sie die Ashx aufrufen. – mybirthname

Antwort

1

Sie nicht (oder immer) von Ihrer ASPX-Seite zu Ihrem .ashx Handler Mitteilung verfassen, wie das nicht der Fall ist, wie es funktioniert. Deshalb funktioniert context.Request.QueryString.Get("input_width.Text") nicht. Es gibt auch keine Notwendigkeit für ".Text", nur "input_width".

Sie müssen die Parameter auf Ihren Anruf an die Ashx anhängen:

<img src="ImageGen.ashx?w=<%= input_width.Text %>&h=<%= input_height.Text %>" width="600" height="400"/> 

und in Ihrem Handler

string _width = context.Request.QueryString["w"]; 
int __width = Convert.ToInt32(_width); 
+0

das ist toll, danke! – aiden87

+0

ich habe gerade festgestellt, dass es nur die Breite bekommt, die als Wert gesetzt ist - Text = "600". Wenn ich es manuell auf meinem Webformular auf 400 ändere, sagt es immer noch 600, wenn ich es debugge ... irgendeine Idee? – aiden87

+0

Durch Setzen von 'Text =" 600 "' wird das immer der Wert sein. Legen Sie einen Standardwert im OnPageLoad-Ereignis innerhalb einer 'if (! IsPostBack)' - Prüfung fest. –

Verwandte Themen