PostBack & ScriptManager Demo
This sample demonstrates the Phase 2 ClientScript postback shims. These methods return the same JavaScript strings as Web Forms, letting migrated code-behind work unchanged in Blazor.
π‘ What this shows
GetPostBackEventReference()β returns a__doPostBack('id','arg')JS stringGetPostBackClientHyperlink()β returns ajavascript:__doPostBack(...)URLScriptManagerShim.GetCurrent(this)β obtains a ScriptManager, registers startup scripts
1. GetPostBackEventReference
ClientScript.GetPostBackEventReference(this, "save") returns a
__doPostBack call string β the same pattern Web Forms uses for server-side
event wiring.
Before (Web Forms)
string script = ClientScript.GetPostBackEventReference(this, "save");
btnSave.Attributes["onclick"] = script;After (Blazor with BWFC)
// Same API β works unchanged
_postBackScript = ClientScript.GetPostBackEventReference(this, "save");
// Wire via onclick="@_postBackScript"Live Demo β PostBack via Button
Click the button to fire __doPostBack from JavaScript.
The PostBack event on WebFormsPageBase receives it server-side.
Generated script: __doPostBack('Index', 'save')
No postback received yet.
2. GetPostBackClientHyperlink
ClientScript.GetPostBackClientHyperlink(this, "navigate") returns a
javascript:__doPostBack(...) URL β drop it into an href
and it triggers a postback when clicked.
Before (Web Forms)
lnk.NavigateUrl = ClientScript.GetPostBackClientHyperlink(this, "navigate");After (Blazor with BWFC)
// Same call
_hyperlink = ClientScript.GetPostBackClientHyperlink(this, "navigate");Live Demo β PostBack via Hyperlink
An anchor tag whose href is a javascript:__doPostBack URL:
Generated href: javascript:__doPostBack('Index', 'navigate')
No hyperlink postback received yet.
3. ScriptManager.GetCurrent
ScriptManager.GetCurrent(this) returns a ScriptManagerShim that
wraps ClientScriptShim. You can call RegisterStartupScript on it β
the same code you wrote in Web Forms.
Before (Web Forms)
var sm = ScriptManager.GetCurrent(this);
sm.RegisterStartupScript(GetType(), "init",
"document.getElementById('target').innerText = 'Hello!';",
true);After (Blazor with BWFC)
// Same pattern
var sm = ScriptManagerShim.GetCurrent(this);
sm.RegisterStartupScript(GetType(), "init",
"document.getElementById('target').innerText = 'Hello!';",
true);Live Demo β ScriptManager Startup Script
On first render, ScriptManagerShim.GetCurrent(this).RegisterStartupScript(...)
sets the text below via JavaScript β just like Web Forms.
Source Code
@page "/ControlSamples/PostBackDemo"
@inherits WebFormsPageBase
@code {
private string _postBackScript = "";
private string _postBackMessage = "No postback received yet.";
private string _postBackHyperlink = "";
private string _hyperlinkMessage = "No hyperlink postback received yet.";
protected override void OnInitialized()
{
base.OnInitialized();
// GetPostBackEventReference β same call as Web Forms
_postBackScript = ClientScript.GetPostBackEventReference(this, "save");
// GetPostBackClientHyperlink β same call as Web Forms
_postBackHyperlink = ClientScript.GetPostBackClientHyperlink(this, "navigate");
// Subscribe to PostBack event
PostBack += (sender, args) =>
{
if (args.EventArgument == "save")
_postBackMessage = $"PostBack received! Target: {args.EventTarget}, Argument: {args.EventArgument}";
else if (args.EventArgument == "navigate")
_hyperlinkMessage = $"Hyperlink PostBack! Target: {args.EventTarget}, Argument: {args.EventArgument}";
StateHasChanged();
};
}
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
var sm = ScriptManagerShim.GetCurrent(this);
sm.RegisterStartupScript(GetType(), "smDemo",
"document.getElementById('scriptmanager-target').innerText = " +
"'ScriptManager startup script executed!';",
true);
}
}
}