【发布时间】:2020-02-10 14:27:29
【问题描述】:
我正在构建一个示例剃须刀组件,但我的按钮 onclick 方法无法触发。当我单击按钮时,什么也没有发生。我什至在方法中放置了一个断点,以查看它是否捕获了它没有捕获的。该组件确实呈现,但正如我所说,当单击按钮时,LoginUser 方法根本没有运行。
剃须刀组件页面:
<div class="text-center">
<Login FieldsetAttr="fieldsetAttr" UsernameAttr="usernameAttr" PasswordAttr="passwordInput"
ButtonAttr="buttonAttr" ButtonText="Sign In" SignInManager="SignInManager"
InvalidAttr="invalidAttr" />
</div>
@code {
Dictionary<string, object> fieldsetAttr =
new Dictionary<string, object>()
{
{"class", "form-group" }
};
Dictionary<string, object> usernameAttr =
new Dictionary<string, object>()
{
{"class", "form-control" },
{"type", "text" },
{"placeholder", "Enter your user name here." }
};
Dictionary<string, object> passwordInput =
new Dictionary<string, object>()
{
{"class", "form-control" },
{"type", "password" }
};
Dictionary<string, object> buttonAttr =
new Dictionary<string, object>()
{
{"class", "" },
{"type", "button" }
};
Dictionary<string, object> invalidAttr =
new Dictionary<string, object>()
{
{"class", "invalid-feedback" }
};
}
剃须刀组件:
<div @attributes="FormParentAttr">
<form @attributes="LoginFormAttr">
<fieldset @attributes="FieldsetAttr">
<legend>Login</legend>
<label for="usernameId">Username</label><br />
<input @attributes="UsernameAttr" id="usernameId" @bind="UserName" /><br />
<label for="upasswordId">Password</label><br />
<input @attributes="PasswordAttr" id="passwordId" @bind="Password" /><br />
<button @attributes="ButtonAttr" @onclick="LoginUser">@ButtonText</button>
@if(errorMessage != null && errorMessage.Length > 0)
{
<div @attributes="InvalidAttr">
@errorMessage
</div>
}
</fieldset>
</form>
</div>
@code {
[Parameter]
public Dictionary<string, object> FormParentAttr { get; set; }
[Parameter]
public Dictionary<string, object> LoginFormAttr { get; set; }
[Parameter]
public Dictionary<string, object> FieldsetAttr { get; set; }
[Parameter]
public Dictionary<string, object> UsernameAttr { get; set; }
[Parameter]
public Dictionary<string, object> PasswordAttr { get; set; }
[Parameter]
public Dictionary<string,object> ButtonAttr { get; set; }
[Parameter]
public SignInManager<IdentityUser> SignInManager { get; set; }
[Parameter]
public Dictionary<string, object> InvalidAttr { get; set; }
private string UserName { get; set; }
private string Password { get; set; }
[Parameter]
public string ButtonText { get; set; }
private string errorMessage { get; set; }
private async Task LoginUser(MouseEventArgs e)
{
var user = new IdentityUser(UserName);
var loginResult = await SignInManager.CheckPasswordSignInAsync(user, Password, true);
if(loginResult.Succeeded)
{
await SignInManager.SignInAsync(user, true);
errorMessage = "";
}
else
{
errorMessage = "Username or password is incorrect.";
}
}
}
【问题讨论】:
-
您是否在浏览器控制台中收到错误消息? (在浏览器中按 F12)
-
我也有同样的问题。调试器不会中断,并且调试器中没有消息,即使将调试级别设置为 0。
-
检查您的
_Host.cshtml文件中是否没有RenderMode.Static。 -
我希望您安装了最新版本的 .Net Core 3.0。
-
@PascalR。该应用程序是 3.0,渲染模式是 RenderMode.ServerPrerendered,我在浏览器中没有看到任何错误。我完全被这件事难住了。我尝试通过几种不同的方式简化我的 onclick 方法,使其成为常规的 void 非异步方法,但它仍然不起作用。我确定我忽略了一些明显的东西,但我根本无法弄清楚。
标签: c# asp.net asp.net-core blazor-server-side asp.net-core-3.0