我试图以与以前使用ASP.NET MVC 5相同的方式将表单过帐到我的控制器,但无法正常工作。
控制器:
[HttpGet]
public IActionResult Login()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Login([FromBody] Login LoginModel)
{
return View();
}
和HTML
<form asp-action="Login" asp-controller="Home" method="post" class="mt-4">
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="uname">E-mail</label>
<input class="form-control" id="uname" type="text"
placeholder="digite e-mail">
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="pwd">Senha</label>
<input class="form-control" id="pwd" type="password"
placeholder="digite sua senha">
</div>
</div>
<div class="col-lg-12 text-center">
<button type="submit" class="btn btn-block btn-dark" />
</div>
</div>
</form>
我试图使用帮助器:
@using (Html.BeginForm("Login", "Login", FormMethod.Post))
{
}
但是生成的HTML不会通过控制器路径:
启动文件
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages().AddRazorRuntimeCompilation();
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Login}/{id?}");
});
}
它显示action="/"
的,而不是action="/Home/Login"
因为你已经设置默认路由的形式/Home/Login
:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Login}/{id?}");
});
如果更改默认路由,它将正确显示。
我已经尝试过您的代码,问题出在您的模型绑定中。
首先,[FromBody]
由于您是从表单而不是请求正文接收数据,因此需要删除。
此外,您的表单无法正确发布数据,因为您没有为输入设置name
属性或使用asp-for
标签帮助程序来绑定输入的数据以根据操作参数进行建模。
最后,查看带有我的假设Login
模型的完整演示:
public class Login
{
public string uname { get; set; }
public string pwd { get; set; }
}
Login.cshtml(添加name
等于Login
模型属性名称的属性):
<form asp-action="Login" asp-controller="Home" method="post" class="mt-4">
<div class="row">
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="uname">E-mail</label>
<input class="form-control" name="uname" id="uname" type="text"
placeholder="digite e-mail">
</div>
</div>
<div class="col-lg-12">
<div class="form-group">
<label class="text-dark" for="pwd">Senha</label>
<input class="form-control" name="pwd" id="pwd" type="password"
placeholder="digite sua senha">
</div>
</div>
<div class="col-lg-12 text-center">
<button type="submit" class="btn btn-block btn-dark" />
</div>
</div>
</form>
开机自检操作:
[HttpPost]
public async Task<IActionResult> Login(Login LoginModel)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句