Blazor 只是 JavaScript 的替代品(更准确地说是“增值”)。它是一个仅限客户端的解决方案(但它可能会在将来添加一些与 ASP.NET 的简单绑定)。
不过,它完全基于 HTML 和 CSS。C# 正在使用 Web 程序集替换 JS 部分。因此,您访问/修改 HTML 控件的方式没有任何改变。
截至目前(0.1.0 版),您必须依靠 HTML DOMfocus()
方法来完成您打算做的事情(是的,您现在必须使用JavaScript :( )。
// Not tested code
// This is JavaScript.
// Put this inside the index.html. Just below <script type="blazor-boot"></script>
<script>
Blazor.registerFunction('Focus', (controlId) => {
return document.getElementById(controlId).focus();
});
</script>
//and then wrap it for calls from .NET:
// This is C#
public static object Focus(string controlId)
{
return RegisteredFunction.Invoke<object>("Focus", controlId);
//object type is used since Invoke does not have a overload for void methods. Don't know why.
//this will return undefined according to js specs
}
有关更多信息,您可以参考以下内容。
如果你想改进 JS 的打包整齐,你可以这样做:
https ://stackoverflow.com/a/49521216/476609
public class BlazorExtensionScripts : Microsoft.AspNetCore.Blazor.Components.BlazorComponent
{
protected override void BuildRenderTree(Microsoft.AspNetCore.Blazor.RenderTree.RenderTreeBuilder builder)
{
builder.OpenElement(0, "script");
builder.AddContent(1, "Blazor.registerFunction('Focus', (controlId) => { document.getElementById(controlId).focus(); });");
builder.CloseElement();
}
public static void Focus(string controlId)
{
RegisteredFunction.Invoke<object>("Focus", controlId);
}
}
然后将此组件添加到根目录:(App.cshtml
):
<BlazorExtensionScripts></BlazorExtensionScripts>
<Router AppAssembly=typeof(Program).Assembly />