我正在.net核心mvc中构建一个登录表单。以下是我的登录表格
<form class="c-form" asp-controller="Account"
asp-action="Login">
<div class="form-group">
@Html.TextBoxFor(m => m.Username, new { @class = "form-control c-input", placeholder = "Username" })
</div>
<div class="form-group">
@Html.PasswordFor(m => m.Password, new { @class = "form-control c-input", placeholder = "Password" })
</div>
<div class="help-text help-text-error">
@Html.ValidationMessage("UserNamePasswordInvalid")
</div>
<div class="">
<button type="submit" class="btn-c btn-teal login-btn width100">Login</button>
</div>
如果使用不正确的凭据发布表单,则用户会在页面上保留验证失败消息。
登录页面在查询字符串中也有返回url,当表单被发布时查询字符串参数丢失。在.net核心中进行表单发布的正确方法是什么?
答案 0 :(得分:1)
要在提交表单时保留查询字符串,请在包含查询字符串内容的表单中写入隐藏字段:
@Html.Hidden("returnUrl",@Request.QueryString)
确保处理post请求的控制器操作有一个名为returnUrl的参数(或作为参数传递的模型具有该属性),并且模型绑定将负责将其传递给控制器。然后在控制器操作中,如果登录成功,则使用该数据进行相应的重定向。
答案 1 :(得分:1)
我知道已经过去了很多时间,但是我找到了解决此问题的更好的方法。
我在模型中添加了一个名为QueryString的参数作为字典字符串
在视图中以标签形式添加
因此,此时,该帖子在查询字符串<form asp-all-route-data="@Model.QueryString"
中具有参数
答案 2 :(得分:0)
您的controller / PageModel方法必须包含您需要保留的所有参数。像这样:
public async Task<IActionResult> OnPostAsync(string returnUrl = null)