我正在尝试以与 ASP.NET MVC 5 相同的方式将表单发布到我的 Controller ,但它不起作用。
Controller :
[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 没有传递 Controller 路径:
启动.cs
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"
,因为您已将默认路由设置为 /主页/登录
:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Login}/{id?}");
});
如果更改默认路由,它将正确显示。
我已经尝试过您的代码,问题出在您的模型绑定(bind)中。
首先,您需要删除 [FromBody]
,因为您是从表单而不是请求正文接收数据。
此外,您的表单无法正确发布数据,因为您没有设置 name
属性或对用于绑定(bind)输入的输入使用 asp-for
标记帮助程序' 根据操作参数建模的数据。
最后,请参阅我的假设登录
模型的完整演示:
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>
POST 操作:
[HttpPost]
public async Task<IActionResult> Login(Login LoginModel)
关于c# - 在 ASP.NET Core MVC 中将表单发布到 Controller 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60766974/