详解ASP.NET页面生命周期

2025-05-29 0 108

ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤。包括初始化、实例化控件、还原和维护状态、运行时间处理程序代码以及进行呈现。熟悉页面生命周期非常重要,这样我们才能在生命周期的合适阶段编写代码。如果我们能在写代码的时候想着我们现在是在做生命周期的哪一步那将是非常好的。

几个代表性的问题

在开始的时候我们先思考几个问题,看看我们在描述完页面生命周期的时候,能不能回答上这几个问题

  • 1.为什么在服务器端能通过this.textbox1.Text获取到用户提交过来的数据?
  • 2.在Page_Load中Response.Write("hello")查看生成的html代码原文件,hello在哪里?为什么?
  • 3.有一个服务器端的按钮,设置了点击事件,该点击事件什么时候执行?是先执行Page_Load事件还是先执行点击事件?
  • 4.为什么在服务器端通过this.textbox1.Text设置值后,客户端就能显示出来?

了解ASP.NET请求管道、应用程序生命周期、整体运行机制童鞋可能知道,ASP.NET应用程序周期中PreRequestHandlerExecute事件与PostRequestHandlerExecute事件之间就是我们的页面生命周期了,对于aspx页面就是一系列的打造页面控件树,触发各种页面时间,对于一般处理程序ashx就是直接执行咱们开发者写的ProcessRequest方法了,对于MVC应用程序就是创建控制器工厂,创建控制器对象,调用Action那一套了。

下面主要讲述的就是ASP.NET WebForm中的页面的生命周期了。

详解ASP.NET页面生命周期

我们用反编译工具查看Page类的ProcessRequest方法可以看见先调用了FrameworkInitialize; FrameworkInitialize里面就是打造了页面控件树,然后调用了ProcessRequestMain,就开始了执行整个页面生命周期了(其实就是调用了一系列的事件方法)(可能部分图看不见右边,可在新标签页中打开图片)

1.打造页面控件树

FrameworkInitialize内部调用了_buildControlTree()方法


详解ASP.NET页面生命周期
  

上图中左边是前台页面的代码,右边是对应 生成的打造控件树的代码。中间截取的是生成表单那一部分的代码。

下面看一张原理图


详解ASP.NET页面生命周期

  浏览器的DOM树是根据Html标签生成一个C语言的DOM树,而ASP.NET服务器端是用C#打造的一个控件树,也是按照DOM结构打造的。本质是一样。服务器端所有东西都加到页面对象的控件集合中去了。标签在服务器端有对应的控件对象的时候就用控件对象,没有的时候就使用LiteralControl进行封装。不管是服务器控件还是字符串标签(没有runat="server"的标签)都以控件对象的方式存在前台页面类的控件集合里面。好处就是生成前台页面的html代码的时候,只需要遍历控件集合里面的每一个控件对象的RenderControl方法,每一个控件都会调用自己的Render方法生成对应的Html字符串。那么所有控件的生成的html字符串就还原成一个页面的html代码了。  

2.触发PerformPreInit事件 

在所有初始化之前初始化了这个事件,这个事件主要是初始化了主题,初始化了母版页

?

1

2

3

4

5

6

7

8

9

10

11

12

13
private void PerformPreInit()

{

this.OnPreInit(EventArgs.Empty);

this.InitializeThemes();

this.ApplyMasterPage();

this._preInitWorkComplete = true;

}

3.触发InitRecursive事件

详解ASP.NET页面生命周期

4.触发LoadAllState()事件

加载页面状态解析ViewState,将页面表单中的ViewState进行反Base64编码,反序列化,存在页面的ViewState属性中

5.触发ProcessPostData(this._requestValueCollection, true)事件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89
private void ProcessPostData(NameValueCollection postData, bool fBeforeLoad)

{

if (this._changedPostDataConsumers == null)

{

this._changedPostDataConsumers = new ArrayList();

}

if (postData != null)

{

foreach (string str in postData)

{

if ((str != null) && !IsSystemPostField(str))

{

Control control = this.FindControl(str);

if (control == null)

{

if (fBeforeLoad)

{

if (this._leftoverPostData == null)

{

this._leftoverPostData = new NameValueCollection();

}

this._leftoverPostData.Add(str, null);

}

}

else

{

IPostBackDataHandler postBackDataHandler = control.PostBackDataHandler;

if (postBackDataHandler == null)

{

if (control.PostBackEventHandler != null)

{

this.RegisterRequiresRaiseEvent(control.PostBackEventHandler);

}

}

else

{

if (postBackDataHandler != null)

{

NameValueCollection postCollection = control.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection;

if (postBackDataHandler.LoadPostData(str, postCollection))

{

this._changedPostDataConsumers.Add(control);

}

}

if (this._controlsRequiringPostBack != null)

{

this._controlsRequiringPostBack.Remove(str);

}

}

}

}

}

}

ArrayList list = null;

if (this._controlsRequiringPostBack != null)

{

foreach (string str2 in this._controlsRequiringPostBack)

{

Control control2 = this.FindControl(str2);

if (control2 != null)

{

IPostBackDataHandler adapterInternal = control2.AdapterInternal as IPostBackDataHandler;

if (adapterInternal == null)

{

adapterInternal = control2 as IPostBackDataHandler;

}

if (adapterInternal == null)

{

object[] args = new object[] { str2 };

throw new HttpException(SR.GetString("Postback_ctrl_not_found", args));

}

NameValueCollection values2 = control2.CalculateEffectiveValidateRequest() ? this._requestValueCollection : this._unvalidatedRequestValueCollection;

if (adapterInternal.LoadPostData(str2, values2))

{

this._changedPostDataConsumers.Add(control2);

}

}

else if (fBeforeLoad)

{

if (list == null)

{

list = new ArrayList();

}

list.Add(str2);

}

}

this._controlsRequiringPostBack = list;

}

}

主要做了两件事

1)将表单里提交过来的控件数据设置给页面对象的控件树中对应控件的属性(给前面打造的控件树里面控件给值),这样在服务器端就可以拿到客户端输入的值了。

2)将表单里面提交过来的值与ViewState中控件原来的值进行比对,不同则表示要触发该控件的Change 事件,则同时将该控件放到一个集合(看源码其实就是changedPostDataConsumers)中。在后续执行过程中遍历改集合依次触发对应控件的Change事件。

6.触发LoadRecursive()事件

详解ASP.NET页面生命周期

大名鼎鼎的Page_Load就是在这里执行的。不过是先执行页面本身的Load事件再执行页面控件的Load事件哦,这时候前面给控件赋的值,表单提交过来的数据,ViewState等等都可以使用了,IsPostBack的原理就是判断是否有name为__VIEWSTATE的数据提交过来
7.再次触发ProcessPostData(this._leftoverPostData, false)事件

这个事件我在网上看了很多人说是将第一次遗漏下来的,第一次执行ProcessPostData没有涉及到的控件进行处理,但是并没有说明哪些遗漏下来了。为什么第一次没处理了? 最后Google查到是处理我们开发者在页面的Page_Load方法中添加的控件。在Page_Load中我们可以自己创建控件对象加到页面对应的“C#DOM树中“,如:在Page_Load中写
TextBox txt = new TextBox();txt.ID ="myTxtBox";this.form1.Controls.Add(txt);
这就是把开发者自己创建的控件加在页面的form1的表单中。当然你也可以加上Change事件了创建控件的时候。执行的还是上面那两件事了。则回发的时候可以给开发者在Page_Lod中手动创建的控件还原值。

8.触发RaiseChangedEvents事件

详解ASP.NET页面生命周期

循环遍历changedPostDataConsumers集合中的所有控件,依次执行控件的非点击回传事件,比如文本框的改变事件等      

9.触发RaisePostBackEvent(this._requestValueCollection)事件

详解ASP.NET页面生命周期

执行按钮点击回传事件或者验证事件,如果有多个按钮,根据回发过来的按钮的 name来判断触发哪个按钮的事件,或者触发该控件的验证事件
10.触发PerformPreRenderComplete事件

循环遍历控件树中所有的控件,根据每个控件生成对应的Html代码,把服务器控件渲染成普通的html控件。

11.触发事件SaveAllState事件

将服务器端ViewState集合中的内容(开发者自己加的数据或控件状态信息等)序列化然后Base64编码然后设置到客户端隐藏域__ViewState中

12.RenderControl(this.CreateHtmlTextWriter(this.Response.Output))

把要发送到客户端浏览器的内容设置到Response.Output,应用程序将它发送 到客户端浏览器。[/code]

看到这里不知道大家是否已经可以清晰地回答开篇提到的几个问题了,其实就是这些事件执行的先后顺序,页面生命周期了。”前人植树,后人乘凉了"

最后附上生命周期ProcessRequest源码  

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

463

464

465

466

467

468

469

470

471

472

473

474

475

476

477

478

479

480

481

482

483

484

485

486

487

488

489

490

491

492

493

494

495

496

497

498

499

500

501

502

503

504

505

506

507

508

509

510

511

512

513

514

515

516

517

518

519

520

521

522

523

524

525

526

527

528

529

530

531

532

533

534

535

536

537

538

539

540

541

542

543

544

545

546

547

548

549

550

551

552

553

554

555

556

557

558

559

560

561

562

563

564

565

566

567

568

569

570

571

572

573

574

575

576

577

578

579

580

581

582

583

584

585

586

587

588

589

590

591

592

593

594

595

596

597

598

599

600

601

602

603

604

605

606

607

608

609

610

611

612

613

614

615

616

617

618

619

620

621

622

623

624

625

626

627

628

629

630

631

632

633

634

635

636

637

638

639

640

641

642

643

644

645

646

647

648

649

650

651

652

653

654

655

656

657

658

659

660

661

662

663

664

665

666

667

668

669

670

671

672

673

674

675

676

677

678

679

680

681

682

683

684

685

686

687

688

689

690

691

692

693

694

695

696

697

698

699

700

701

702

703

704

705

706

707

708

709

710

711

712

713

714

715

716

717

718

719

720

721

722

723

724

725

726

727

728

729

730

731

732
private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)

{

try

{

HttpContext context = this.Context;

string str = null;

if (includeStagesBeforeAsyncPoint)

{

if (this.IsInAspCompatMode)

{

AspCompatApplicationStep.OnPageStartSessionObjects();

}

if (this.PageAdapter != null)

{

this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();

if (this._requestValueCollection != null)

{

this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated();

}

}

else

{

this._requestValueCollection = this.DeterminePostBackMode();

if (this._requestValueCollection != null)

{

this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated();

}

}

string callbackControlID = string.Empty;

if (this.DetermineIsExportingWebPart())

{

if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)

{

throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));

}

str = this.Request.QueryString["webPart"];

if (string.IsNullOrEmpty(str))

{

throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));

}

if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase))

{

this._pageFlags.Set(4);

}

string str3 = this.Request.QueryString["query"];

if (str3 == null)

{

str3 = string.Empty;

}

this.Request.QueryStringText = str3;

context.Trace.IsEnabled = false;

}

if (this._requestValueCollection != null)

{

if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null)

{

this.ContainsEncryptedViewState = true;

}

callbackControlID = this._requestValueCollection["__CALLBACKID"];

if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST))

{

this._isCallback = true;

}

else if (!this.IsCrossPagePostBack)

{

VirtualPath path = null;

if (this._requestValueCollection["__PREVIOUSPAGE"] != null)

{

try

{

path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID));

}

catch

{

this._pageFlags[8] = true;

}

if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject))

{

this._pageFlags[8] = true;

this._previousPagePath = path;

}

}

}

}

if (this.MaintainScrollPositionOnPostBack)

{

this.LoadScrollPosition();

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreInit");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest);

}

this.PerformPreInit();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreInit");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin Init");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);

}

this.InitRecursive(null);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Init");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin InitComplete");

}

this.OnInitComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End InitComplete");

}

if (this.IsPostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin LoadState");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);

}

this.LoadAllState();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End LoadState");

this.Trace.Write("aspx.page", "Begin ProcessPostData");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);

}

this.ProcessPostData(this._requestValueCollection, true);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End ProcessPostData");

}

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreLoad");

}

this.OnPreLoad(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreLoad");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin Load");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);

}

this.LoadRecursive();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Load");

}

if (this.IsPostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");

}

this.ProcessPostData(this._leftoverPostData, false);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End ProcessPostData Second Try");

this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);

}

this.RaiseChangedEvents();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Raise ChangedEvents");

this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);

}

this.RaisePostBackEvent(this._requestValueCollection);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Raise PostBackEvent");

}

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin LoadComplete");

}

this.OnLoadComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End LoadComplete");

}

if (this.IsPostBack && this.IsCallback)

{

this.PrepareCallback(callbackControlID);

}

else if (!this.IsCrossPagePostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreRender");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);

}

this.PreRenderRecursiveInternal();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreRender");

}

}

}

if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking)

{

this.ExecuteRegisteredAsyncTasks();

}

this.ValidateRawUrlIfRequired();

if (includeStagesAfterAsyncPoint)

{

if (this.IsCallback)

{

this.RenderCallback();

}

else if (!this.IsCrossPagePostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreRenderComplete");

}

this.PerformPreRenderComplete();

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreRenderComplete");

}

if (context.TraceIsEnabled)

{

this.BuildPageProfileTree(this.EnableViewState);

this.Trace.Write("aspx.page", "Begin SaveState");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);

}

this.SaveAllState();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End SaveState");

this.Trace.Write("aspx.page", "Begin SaveStateComplete");

}

this.OnSaveStateComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End SaveStateComplete");

this.Trace.Write("aspx.page", "Begin Render");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);

}

if (str != null)

{

this.ExportWebPart(str);

}

else

{

this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Render");

}

this.CheckRemainingAsyncTasks(false);

}

}

}

catch (ThreadAbortException exception1)

{

HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException;

if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout)

{

this._context.ApplicationInstance.CompleteRequest();

ThreadResetAbortWithAssert();

}

else

{

this.CheckRemainingAsyncTasks(true);

throw;

}

}

catch (ConfigurationException)

{

throw;

}

catch (Exception exception2)

{

PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);

PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);

if (!this.HandleError(exception2))

{

throw;

}

}

}

private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool includeStagesAfterAsyncPoint)

{

try

{

HttpContext context = this.Context;

string str = null;

if (includeStagesBeforeAsyncPoint)

{

if (this.IsInAspCompatMode)

{

AspCompatApplicationStep.OnPageStartSessionObjects();

}

if (this.PageAdapter != null)

{

this._requestValueCollection = this.PageAdapter.DeterminePostBackMode();

if (this._requestValueCollection != null)

{

this._unvalidatedRequestValueCollection = this.PageAdapter.DeterminePostBackModeUnvalidated();

}

}

else

{

this._requestValueCollection = this.DeterminePostBackMode();

if (this._requestValueCollection != null)

{

this._unvalidatedRequestValueCollection = this.DeterminePostBackModeUnvalidated();

}

}

string callbackControlID = string.Empty;

if (this.DetermineIsExportingWebPart())

{

if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)

{

throw new InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));

}

str = this.Request.QueryString["webPart"];

if (string.IsNullOrEmpty(str))

{

throw new InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));

}

if (string.Equals(this.Request.QueryString["scope"], "shared", StringComparison.OrdinalIgnoreCase))

{

this._pageFlags.Set(4);

}

string str3 = this.Request.QueryString["query"];

if (str3 == null)

{

str3 = string.Empty;

}

this.Request.QueryStringText = str3;

context.Trace.IsEnabled = false;

}

if (this._requestValueCollection != null)

{

if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] != null)

{

this.ContainsEncryptedViewState = true;

}

callbackControlID = this._requestValueCollection["__CALLBACKID"];

if ((callbackControlID != null) && (this._request.HttpVerb == HttpVerb.POST))

{

this._isCallback = true;

}

else if (!this.IsCrossPagePostBack)

{

VirtualPath path = null;

if (this._requestValueCollection["__PREVIOUSPAGE"] != null)

{

try

{

path = VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"], Purpose.WebForms_Page_PreviousPageID));

}

catch

{

this._pageFlags[8] = true;

}

if ((path != null) && (path != this.Request.CurrentExecutionFilePathObject))

{

this._pageFlags[8] = true;

this._previousPagePath = path;

}

}

}

}

if (this.MaintainScrollPositionOnPostBack)

{

this.LoadScrollPosition();

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreInit");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER, this._context.WorkerRequest);

}

this.PerformPreInit();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreInit");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin Init");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER, this._context.WorkerRequest);

}

this.InitRecursive(null);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Init");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin InitComplete");

}

this.OnInitComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End InitComplete");

}

if (this.IsPostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin LoadState");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER, this._context.WorkerRequest);

}

this.LoadAllState();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End LoadState");

this.Trace.Write("aspx.page", "Begin ProcessPostData");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER, this._context.WorkerRequest);

}

this.ProcessPostData(this._requestValueCollection, true);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End ProcessPostData");

}

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreLoad");

}

this.OnPreLoad(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreLoad");

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin Load");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER, this._context.WorkerRequest);

}

this.LoadRecursive();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Load");

}

if (this.IsPostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin ProcessPostData Second Try");

}

this.ProcessPostData(this._leftoverPostData, false);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End ProcessPostData Second Try");

this.Trace.Write("aspx.page", "Begin Raise ChangedEvents");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER, this._context.WorkerRequest);

}

this.RaiseChangedEvents();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Raise ChangedEvents");

this.Trace.Write("aspx.page", "Begin Raise PostBackEvent");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER, this._context.WorkerRequest);

}

this.RaisePostBackEvent(this._requestValueCollection);

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Raise PostBackEvent");

}

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin LoadComplete");

}

this.OnLoadComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End LoadComplete");

}

if (this.IsPostBack && this.IsCallback)

{

this.PrepareCallback(callbackControlID);

}

else if (!this.IsCrossPagePostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreRender");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER, this._context.WorkerRequest);

}

this.PreRenderRecursiveInternal();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreRender");

}

}

}

if ((this._legacyAsyncInfo == null) || this._legacyAsyncInfo.CallerIsBlocking)

{

this.ExecuteRegisteredAsyncTasks();

}

this.ValidateRawUrlIfRequired();

if (includeStagesAfterAsyncPoint)

{

if (this.IsCallback)

{

this.RenderCallback();

}

else if (!this.IsCrossPagePostBack)

{

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "Begin PreRenderComplete");

}

this.PerformPreRenderComplete();

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End PreRenderComplete");

}

if (context.TraceIsEnabled)

{

this.BuildPageProfileTree(this.EnableViewState);

this.Trace.Write("aspx.page", "Begin SaveState");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER, this._context.WorkerRequest);

}

this.SaveAllState();

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End SaveState");

this.Trace.Write("aspx.page", "Begin SaveStateComplete");

}

this.OnSaveStateComplete(EventArgs.Empty);

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End SaveStateComplete");

this.Trace.Write("aspx.page", "Begin Render");

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER, this._context.WorkerRequest);

}

if (str != null)

{

this.ExportWebPart(str);

}

else

{

this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));

}

if (EtwTrace.IsTraceEnabled(5, 4))

{

EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE, this._context.WorkerRequest);

}

if (context.TraceIsEnabled)

{

this.Trace.Write("aspx.page", "End Render");

}

this.CheckRemainingAsyncTasks(false);

}

}

}

catch (ThreadAbortException exception1)

{

HttpApplication.CancelModuleException exceptionState = exception1.ExceptionState as HttpApplication.CancelModuleException;

if ((((includeStagesBeforeAsyncPoint & includeStagesAfterAsyncPoint) && (this._context.Handler == this)) && ((this._context.ApplicationInstance != null) && (exceptionState != null))) && !exceptionState.Timeout)

{

this._context.ApplicationInstance.CompleteRequest();

ThreadResetAbortWithAssert();

}

else

{

this.CheckRemainingAsyncTasks(true);

throw;

}

}

catch (ConfigurationException)

{

throw;

}

catch (Exception exception2)

{

PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);

PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);

if (!this.HandleError(exception2))

{

throw;

}

}

}

以上就是关于ASP.NET页面生命周期的详细内容介绍,希望对大家的学习有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 详解ASP.NET页面生命周期 https://www.kuaiidc.com/102600.html

相关文章

发表评论
暂无评论