我只是在摆弄我的第一个 Blazer 服务器应用程序,并且在提交 EditForm 时遇到了问题。验证适用于绑定到具有必需注释的属性的两个文本框,但当我提交表单时,不会调用任何表单方法,Chrome 只会报告错误。知道问题是什么吗?
页
@page "/"
@inject NavigationManager NavigationManager
@using MyModels
<div class="backgroupContainer">
<EditForm Model="@authModel" OnValidSubmit="HandleValidSubmit" OnInvalidSubmit="HandleInValidSubmit">
<DataAnnotationsValidator />
<div id="login">
<img id="login-image" src="images/img-01.png" alt="Login" />
<div class="container">
<div id="login-row" class="row justify-content-center align-items-center">
<div id="login-column" class="col-md-6">
<div id="login-box" class="col-md-12">
<form id="login-form" class="form" action="" method="post">
<h3 class="text-center text-info">Login</h3>
<div class="form-group">
<label for="username" class="text-info">Username:</label><br>
<InputText id="username" class="form-control" placeholder="Username" @bind-Value="authModel.Username" />
<ValidationMessage For="@(() => authModel.Username)" />
</div>
<div class="form-group">
<label for="password" class="text-info">Password:</label><br>
<InputText id="password" class="form-control" type="password" placeholder="Password" @bind-Value="authModel.Password" />
<ValidationMessage …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的 Blazor 服务器应用程序:类“UserSettings.cs”被注入到组件中。
public class UserSettings
{
public Guid Id{ get; } = Guid.NewGuid();
}
services.AddScoped<UserSettings>();
Run Code Online (Sandbox Code Playgroud)
我在不同组件的 UserSetting 服务中显示 Id。切换组件后,Id 保持不变,但是当我刷新页面时,它会发生变化。为什么刷新页面时Service会重新初始化?
我想知道是否有人知道如何在按下保存按钮“已提交”后清除所有输入字段?当我返回页面时,我的价值观仍然存在。
这是我正在使用的代码。
@page "/testform"
@inject BlazorApp6.Data.Person person
@inject BlazorApp6.DBContext.ValidationTestContext Context
@inject BlazorApp6.Interface.INterface Manager
<EditForm Model="@person" OnValidSubmit="@CreatePerson">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="Name">Name</label>
<InputText @bind-Value=Person.Name class="form-control" id="Name" />
<ValidationMessage For=@(() => Person.Name) />
</div>
<div class="form-group">
<label for="Age">Age</label>
<InputNumber @bind-Value=Person.Age class="form-control" id="Age" />
<ValidationMessage For=@(() => Person.Age) />
</div>
<input type="submit" class="btn btn-primary" value="Save" />
</EditForm>
@code {
protected override async Task OnInitializedAsync()
{
person.OnChange += StateHasChanged;
}
private void CreatePerson()
{
Manager.Create(person);
}
}
Run Code Online (Sandbox Code Playgroud) 如何配置 BlazorHub 端点以要求经过身份验证的用户在未经过身份验证的情况下自动重定向登录?
我已尝试配置默认授权策略以及调用RequireAuthenticatedBlazorHub 端点生成器,但当我运行 Blazor 应用程序时,我仍然没有重定向到登录页面。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(); // added by me
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
}); // added by me
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 …Run Code Online (Sandbox Code Playgroud) c# authentication blazor blazor-server-side asp.net-core-5.0
从单元测试注入时出现此错误。
System.InvalidOperationException: ''NavigationManagerProxy' has not been initialized.'
Run Code Online (Sandbox Code Playgroud)
我的代码:
Services.AddSingleton<NavigationManager>(Mock.Of<NavigationManager>());
Run Code Online (Sandbox Code Playgroud) 我在 blazor 中有一个列表组件,其中有一个可折叠的创建部分,我希望当您单击以显示创建部分时,它将显示并滚动到创建部分。我的问题是 StateHasChanged() 没有及时更新 UI,因此当 javascript 触发时,我们尝试滚动到的元素还不存在。
显然我可以通过超时来解决这个问题,但是在 Blazor 中执行此操作的更干净的方法是什么?有没有办法说类似await StateUpdated()......
我的代码看起来像这样:
@page "/createlist"
<div>
<h3>My List</h3>
<a @onclick="ToggleAdding">
Create New
</a>
</div>
<ul>
@* list existing items... *@
</ul>
@if (IsAdding)
{
<div id="some-create-id">
<h3>Add Section</h3>
@* create controls here *@
</div>
}
@code {
public void ToggleAdding()
{
IsAdding = !IsAdding;
// Need something similar to StateHasChanged(), that is awaitable.
JsRuntime.InvokeVoidAsync("ScrollIn", new object[] { CreateElementId });
}
}
Run Code Online (Sandbox Code Playgroud)
js 很简单:
ScrollIn = id => { …Run Code Online (Sandbox Code Playgroud) 我试图通过设置从 razor 页面显示 blazor 组件render-mode="Server",但它没有显示该组件。那就是下面的代码不起作用。
<component type="typeof(BlazorRC.Pages.SelectCity)" render-mode="Server" />
Run Code Online (Sandbox Code Playgroud)
但是,当我将其更改为时,render-mode="ServerPrerendered"组件就会显示。这就是下面的代码的工作原理。
<component type="typeof(BlazorRC.Pages.SelectCity)" render-mode="ServerPrerendered" />
Run Code Online (Sandbox Code Playgroud)
为什么会出现这种情况??我应该做什么才能render-mode="Server"工作?
我创建了一个 TestComponent.razor
@typeparam TValue
@code {
private TValue Type { get; set; }
[Parameter] public string String { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在index.razor页面中我有以下内容:
@page "/"
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<ComponentFactory.Data.SampleComponent TValue="@myType" String="@myString"></ComponentFactory.Data.SampleComponent>
@code{
Type myType { get; set; } = typeof(string);
string myString { get; set; } = "hello";
}
Run Code Online (Sandbox Code Playgroud)
我无法Type myType进入TValue,除非我制作myType当前@typeparam页面
为什么会发生这种情况?有没有办法将变量传递到组件中@typeparam?
我有一个 razor 类库和使用该库的 blazor 服务器,RCL 中的每个组件都有自己的 css,在阅读了 microsoft ASP.NET Core Blazor CSS 隔离的文档后,我执行了以下操作:
<MyComponent /><link href="Blazor.Components.styles.css" rel="stylesheet">。运行应用程序后,我看不到 MyComponent 的 css。
我做错了什么吗?你能给我一些建议吗?我读过这个页面,它遵循相同的方法,但适用于 Webassemble!。
谢谢。
如何在 Blazor 中的 TextArea 的值每次发生变化时自动滚动到底部?
为了测试它,我尝试使用内联 JS 来更改我在 Stack Overflow 上找到的元素的大小:“ oninput="this.style.height = 'auto'; this.style.height = (this.scrollHeight) + 'px';" "
只要我手动填充文本区域,它就可以工作。但当像我想的那样从后端填充它时它不起作用:
protected async System.Threading.Tasks.Task TestButtonClick0()
{
TextAreaText += ">> SPAM Test \n";
}
Run Code Online (Sandbox Code Playgroud)