Vra

Probeer iets soos hierdie:

HttpApplication app = s as HttpApplication; //s is sender of the OnBeginRequest event
System.Web.UI.Page p = (System.Web.UI.Page)app.Context.Handler;
System.Web.UI.WebControls.Label lbl = new System.Web.UI.WebControls.Label();
lbl.Text = "TEST TEST TEST";
p.Controls.Add(lbl);    

wanneer dit loop kry ek "verwysing Object nie ingestel om 'n geval van 'n voorwerp." vir die laaste linie ...

Hoe kom ek by twee lyne van die teks (asp.net/html) by spesifieke loactions voeg in die oorspronklike lêer? En hoe kan ek uitvind die uitbreiding van die lêer (Ek wil net om dit toe te pas op ASPX lêers ...?

Was dit nuttig?

Oplossing

Ek is nie seker nie, maar ek dink nie jy kan 'n HttpModule gebruik om beheer boom die Page se verander (asseblief korrigeer my as ek verkeerd is). Jy kan egter verander die HTML opmaak, jy sal moet 'n "reaksie filter" vir hierdie skrywe. Vir 'n voorbeeld, sien http://aspnetresources.com/articles/HttpFilters.aspx , of Google vir "httpmodule reaksie filter".

Ander wenke

Die meer eenvoudig as wat jy dink:

    public void Init(HttpApplication app)
    {
        app.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
    }

    private void OnPreRequestHandlerExecute(object sender, EventArgs args)
    {
        HttpApplication app = sender as HttpApplication;
        if (app != null)
        {
            Page page = app.Context.Handler as Page;
            if (page != null)
            {
                page.PreRender += OnPreRender;
            }
        }
    }

    private void OnPreRender(object sender, EventArgs args)
    {
        Page page = sender as Page;
        if (page != null)
        {
            page.Controls.Clear(); // Or do whatever u want with ur page...
        }
    }

As die PreRender Event is nie voldoende u kan byvoeg wat ook al Event u nodig het in die PreRequestHandlerExecute Eventhandler ...

Dit lyk asof die HttpFilter oplossing is om te doen die truuk hier: o)

As ek gebruik het MOSS / NET 2.x + Ek kon Runes weergawe gebruik of net my tags bygevoeg in 'n meester bladsy ...

Super voorstelle en na my toets van die oplossing, sal ek oplossing miies.myopenid.com se aanvaar as dit lyk vir thar werklike probleem op te los

Daar is 'n paar veranderinge in hoe jy skryf HttpModules in IIS7 is in vergelyking met IIS6 of 5, so dit kan wees dat my voorstel is nie geldig as jy 'IIS7.

As jy die huidige statiese eiendom van die HttpContext gebruik kan jy 'n verwysing na die huidige konteks kry. Die HttpContext klas het eienskappe vir beide die Versoek (HttpRequest tipe) en die reaksie (HttpResponse) en afhangende van waar welke geval jy is die hantering van (Application.EndRequest miskien?) Jy kan verskillende aksies uit te voer op hierdie voorwerpe.

As jy wil hê dat die inhoud van die bladsy word oorgelewer het, verander jy sal waarskynlik wil hê om dit te doen so laat as moontlik so te reageer op die EndRequest gebeurtenis is waarskynlik die beste plek om dit te doen.

Kontrolering wat lêer tipe wat aangevra is kan gedoen word deur te kyk na die eiendom Request.Url, miskien saam met die System.IO.Path klas. Probeer iets soos hierdie:

string requestPath = HttpContext.Current.Request.Url.AbsolutePath;
string extension = System.IO.Path.GetExtension(requestPath);
bool isAspx = extension.Equals(".aspx");

Die wysiging van die inhoud is harder. Jy kan in staat wees om dit te doen in een van die gebeure van die konteks voorwerp, maar ek is nie seker nie.

Een moontlike benadering kan wees om jou eie cusom Page afgelei klas wat jou sal kyk vir 'n waarde in die versameling Context.Items skryf. As hierdie waarde is bevind jy kan 'n Label voeg by 'n plekhouer voorwerp en stel die teks van die etiket om alles wat jy wil.

Iets soos hierdie moet werk:

Voeg die volgende kode om 'n HttpModule afgelei klas:

public void Init(HttpApplication context)
{
  context.BeginRequest += new EventHandler(BeginRequest);
}

void BeginRequest(object sender, EventArgs e)
{

  HttpContext context = HttpContext.Current;
  HttpRequest request = context.Request;

  string requestPath = HttpContext.Current.Request.Url.AbsolutePath;
  string extension = System.IO.Path.GetExtension(requestPath);
  bool isAspx = extension.Equals(".aspx");

  if (isAspx)
  {
    // Add whatever you need of custom logic for adding the content here
    context.Items["custom"] = "anything here";
  }

}

Toe jy die volgende klas toe te voeg tot die gids App_Code:

public class CustomPage : System.Web.UI.Page
{
  public CustomPage()
  { }

  protected override void OnPreRender(EventArgs e)
  {
    base.OnPreRender(e);

    if (Context.Items["custom"] == null)
    {
      return;
    }

    PlaceHolder placeHolder = this.FindControl("pp") as PlaceHolder;
    if (placeHolder == null)
    {
      return;
    }

    Label addedContent = new Label();
    addedContent.Text = Context.Items["custom"].ToString();
    placeHolder .Controls.Add(addedContent);

  }

}

Toe jy jou bladsye te verander soos volg:

public partial class _Default : CustomPage

Let daarop dat die erfenis is verander van System.Web.UI.Page om CustomPage.

En laastens jy plekhouer voorwerpe te voeg aan jou ASPX lêers waar jy jou wil persoonlike inhoud.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top