观看 Dan Roth 的 Blazor 演示(2020 年 1 月 15 日)后,对 razor 文件的代码更改已刷新到浏览器,而无需停止|构建|运行周期。在我的 VS2019(最新)上,我没有得到热重载。这是来自标准模板的新 Blazor SS 项目。是否需要设置某个属性才能启用它?
我尝试了 dotnet run watch 但没有区别
我正在学习服务器端 blazor 并尝试学习身份验证。每当我使用 SignInManager.SignInAsync(.......) 时,它都会引发以下异常:
System.InvalidOperationException:无法修改响应标头,因为响应已开始。 在 Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.ThrowIfReadOnly() 在 Microsoft.AspNetCore.HttpSys.Internal.HeaderCollection.set_Item(String key, StringValues value) 在 Microsoft.AspNetCore.Http.ResponseCookies.Append(String key, String value, CookieOptions 选项) 位于 Microsoft.AspNetCore.Authentication.Cookies.ChunkingCookieManager.AppendResponseCookie(HttpContext context、String key、String value、CookieOptions options) 位于 Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler.HandleSignInAsync(ClaimsPrincipal 用户、AuthenticationProperties 属性) 位于 Microsoft。 AspNetCore.Authentication.AuthenticationService.SignInAsync(HttpContext 上下文、字符串方案、ClaimsPrincipal 主体、AuthenticationProperties 属性) 位于 Microsoft.AspNetCore.Identity.SignInManager
1.SignInWithClaimsAsync(TUser user, AuthenticationProperties authenticationProperties, IEnumerable1 extraClaims),位于 C:\my_work\Blazor_learning\GroupMembersInfo 中的 GroupMembersInfo.Pages.RegisterUser.Register() \Pages\RegisterUser.razor:第 52 行位于 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务任务)位于 Microsoft.AspNetCore.Components.Forms.EditForm.HandleSubmitAsync()
位于 Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(任务任务) )在 Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(任务 taskToHandle)
我认为异常是从我突出显示的方法中抛出的。那么我该如何缓解这个问题。这是我的代码
启动程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Components;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using …Run Code Online (Sandbox Code Playgroud) 我只想在用户单击搜索按钮时将剃刀组件加载到另一个剃刀组件中,然后当用户单击隐藏按钮时将搜索剃刀组件(页面)显示到隐藏的 div 中,然后它将被隐藏。就像内联弹出窗口一样。
OnInitializedAsync有没有办法从生命周期方法中检测 Blazor 组件中是否正在进行预渲染?我知道组件工作流程会调用OnInitializedAsync两次,第一次用于预渲染,第二次用于实际渲染。最后,OnAfterRenderAsync一次性调用该方法进行实际渲染。
但是,我需要检测OnInitializedAsync. 这样我就可以在预渲染中进行一些更改,并在实际渲染中阻止它,反之亦然。
我检查了下面的 GitHub 问题,但没有有效的解决方案。我希望,它应该在像IsPrerendering.
https://github.com/dotnet/aspnetcore/issues/17282
提前致谢。
我根据列表的内容动态填充下拉列表的值。当选择下拉列表中的某个项目时,会显示删除该项目的选项。当项目被删除时,它首先从列表中删除,然后重建下拉列表,这就是我遇到问题的地方。重建下拉列表时,不会将其返回到默认值,而是将删除的下拉列表下方的值显示为已选择(这种情况会在@onchange 值被触发时发生)。重建时如何使下拉列表恢复到默认值?
这是一些代码,Razor 代码:
<select class="form-control" @onchange="selectedValue">
<option value="">select one</option>
@foreach (var mod in values)
{
<option value="@mod.Id">@mod.Name</option>
}
</select>
Run Code Online (Sandbox Code Playgroud)
填充列表的名为 Items 的类:
public class Items
{
public string Name { get; set; }
public int Id { get; set; }
public Items(string name, int id)
{
Name = name;
Id = id;
}
}
Run Code Online (Sandbox Code Playgroud)
列表本身(在填充之前):
public List<Items> itm = new List<Items>();
Run Code Online (Sandbox Code Playgroud)
名为 onchange 的函数:
public string SelectedValue = "";
public void selectedValue(ChangeEventArgs selectEvent)
{
SelectedValue = selectEvent.Value.ToString(); …Run Code Online (Sandbox Code Playgroud) html-select onchange drop-down-menu blazor blazor-server-side
我目前正在编写一个(服务器端)Blazor 应用程序,其中包含默认的 AzureAD 身份验证。
这对于经过身份验证的用户来说效果很好 - 挑战入口 ( _Host.cshtml) 文件,重定向,然后在经过身份验证后返回。
我需要有几个页面不需要身份验证 - 我不希望用户受到质询并重定向到 Microsoft。
这样做的正确方法是什么?我已经尝试过AllowAnonymousAttribute剃刀AllowAnonymousToPage页面选项,似乎没有什么可以阻止挑战。
任何帮助将不胜感激!
以下是我的身份验证设置(ConfigureServices):
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddTelerikBlazor();
}
Run Code Online (Sandbox Code Playgroud)
然后是配置中的相应部分:
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
Run Code Online (Sandbox Code Playgroud) authentication azure azure-active-directory blazor blazor-server-side
所以我注意到在我的 _Host.cshtml 文件中,我在</body>标签之前有这个脚本
<script src="_framework/blazor.server.js"></script>
Run Code Online (Sandbox Code Playgroud)
我还有一些应该在之后加载的脚本,它们是
<script src="assets/plugins/jquery/jquery.min.js"></script>
<script src="assets/plugins/jquery-ui/jquery-ui.js"></script>
<script src="assets/plugins/popper/popper.js"></script>
<script src="assets/plugins/feather/feather.min.js"></script>
<script src="assets/plugins/bootstrap/js/bootstrap.min.js"></script>
<script src="assets/plugins/typeahead/typeahead.js"></script>
<script src="assets/plugins/typeahead/typeahead-active.js"></script>
<script src="assets/plugins/pace/pace.min.js"></script>
<script src="assets/plugins/slimscroll/jquery.slimscroll.min.js"></script>
<script src="assets/plugins/highlight/highlight.min.js"></script>
<!-- Articles Script -->
<script src="assets/plugins/dataTable/datatables.min.js"></script>
<script src="assets/plugins/summernote/summernote.min.js"></script>
<script src="assets/plugins/bootstrap-tagsinput/bootstrap-tagsinput.js"></script>
<!-- Required Script -->
<script src="assets/js/app.js"></script>
<script src="assets/js/avesta.js"></script>
<script src="assets/js/avesta-customizer.js"></script>
</body>
Run Code Online (Sandbox Code Playgroud)
但是,如果我的顶部有 blazor.js 脚本,我的菜单将无法正常工作,它将停止工作并如下所示。实际上,我点击了很多次,但它并没有像你所看到的那样有动画效果。
但是,如果我将 blazor.server.js 脚本放在底部最后加载,它就可以正常工作,看起来像这样
但是如果我最后加载它,我会在控制台中看到它
这导致我无法做到这一点
<input @bind="@CurrentValue" @oninput="@((e) => { CurrentValue=(string)e.Value;})" @onkeypress="KeyPress" class="form-control" type="text" placeholder="Search" aria-label="Search">
Run Code Online (Sandbox Code Playgroud)
它只是根本没有击中该函数,什么也没有发生,它没有注册它。
我使用 Dictionary<string,string> 来存储一些选项,键是选项的名称,正如您猜测的那样,该值是相应选项的值。
在我的剃刀文件中,我有这段代码:
@foreach (KeyValuePair<string, string> option in templates.templatesList[SelectionValue])
{
<tr>
<td>@option.Key</td>
<td><input type="text"/></td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
我要做的是将文本输入的值存储到字典中的正确值中,遗憾的是我们不能使用@bind = @option.Value。
Blazor 服务器端是基于 signalr 构建的,因此我假设它知道用户何时离开网站(关闭连接)。是否有任何引发的事件可供我用来记录此事件?或者任何其他方式真的!
我有一个布局 ( MainLayout.razor),它有一个名为ShowFooter. 在某些页面上,我希望能够将该标志设置为true,而将其他一些设置为false。
我还没有找到任何关于页面(即带有路由的组件)如何与其布局进行通信的明确说明。这可以/应该如何在 Blazor 中完成?
注意:您可能建议使用 2 种布局,一种有页脚,一种没有页脚,但这并不能真正解决我的问题,我希望能够在同一页面的不同时间显示和隐藏页脚。另外,这只是需要在布局和页面之间进行通信的一种情况。还有无数其他的。
blazor ×8
c# ×4
asp.net-core ×2
asp.net ×1
azure ×1
html-select ×1
javascript ×1
matblazor ×1
onchange ×1
prerender ×1