Koden virker kun hvis fra start af view state til end of form er i samme Write.
Ikke speciel god kode.
Jeg ville lade Write samle op i en buffer og så lade Close flytte rundt og skrive det hele til den rigtige stream.
Hej Arne, tak for svar.
Kan du give et eksempel på at samle det op i en buffer?
using System;
using System.IO;
using System.Web;
public class ViewMoveModule : IHttpModule
{
public void Init(HttpApplication app)
{
app.BeginRequest += OnBeginRequest;
}
protected void OnBeginRequest(object sender, EventArgs e)
{
HttpResponse resp = ((HttpApplication)sender).Response;
resp.Filter = new ViewMove(resp.Filter);
}
public void Dispose()
{
}
}
using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
public class ViewMove : Stream
{
private Stream real;
private Stream temp;
public ViewMove(Stream real)
{
this.real = real;
this.temp = new MemoryStream();
}
public override bool CanRead
{
get
{
return false;
}
}
public override bool CanSeek
{
get
{
return false;
}
}
public override bool CanWrite
{
get
{
return true;
}
}
public override long Length
{
get
{
return temp.Length;
}
}
public override long Position
{
get
{
return temp.Position;
}
set
{
throw new NotSupportedException();
}
}
public override int Read(byte[] buffer, int offset, int count)
{
throw new NotSupportedException();
}
public override long Seek(long offset, SeekOrigin direction)
{
throw new NotSupportedException();
}
public override void SetLength(long length)
{
throw new NotSupportedException();
}
public override void Close()
{
temp.Close();
String html = Encoding.UTF8.GetString(((MemoryStream)temp).ToArray());
int startix = html.IndexOf(@"<input type=""hidden"" name=""__VIEWSTATE""");
if(startix > 0)
{
int endix = html.IndexOf("/>", startix) + 2;
string viewstate = html.Substring(startix, endix - startix);
html = html.Replace(viewstate, "");
html = html.Replace("</form>", viewstate + "</form>");
}
byte[] b = Encoding.UTF8.GetBytes(html);
real.Write(b, 0, b.Length);
}
public override void Flush()
{
temp.Flush();
}
public override void Write(byte[] buffer, int offset, int count)
{
temp.Write(buffer, offset, count);
}
}
Smukt :)
Tusind tak for hjælpen! smid et svar så er der velfortjente point!
Husk og rette tegnsæt, hvis du bruger et andet.