提问人:Emre Bener 提问时间:10/18/2023 更新时间:10/18/2023 访问量:30
ASP.NET 核心模型绑定无缘无故地不起作用
ASP.NET Core Model Binding Not Working for No Apparent Reason
问:
我正在尝试将模型绑定到视图(更具体地说,是部分视图)。当我调试代码时,我可以清楚地看到传递给视图的正确对象,但在浏览器 DevTools 中,我看到响应为空窗体。我确实得到了一个视图,但模型没有绑定到它,所以表单是空的。
供您参考,以下是部分视图代码:
@model MyApp.Models.Company
<form method="post" id="editForm" enctype="multipart/form-data">
<div class="form-group">
<label asp-for="Name" class="control-label"></label> <span style="color:red;">*</span>
<input asp-for="Name" class="form-control" />
</div>
<div class="form-group">
<label asp-for="IsActive" class="control-label"></label>
<input type="checkbox" asp-for="IsActive" class="form-check-input" style="display: block;" value="true" />
</div>
<input type="hidden" asp-for="Id" />
<div id="errorContainer" style="color:red; background-color: #ffedf0; border-radius: 0.25rem;"></div>
</form>
这是处理请求并返回部分视图的控制器操作。请注意,完全相同的代码适用于另一个项目:
public IActionResult EditPopup(Guid id) // returns `edit` partial view
{
try
{
var model = _context.Companies.Where(x => x.Id.ToString() == id.ToString()).FirstOrDefault();
if (model == null)
return Problem(statusCode: 400, detail: "Bad Request"); // 400 Bad Request
return PartialView("_EditPartial", model);
}
catch (Exception ex)
{
// TODO logla
return Problem(statusCode: 500, detail: "An unexpected error happened"); // 500 Internal Server Error
}
}
我在任何地方都没有错误。VS 或浏览器控制台中没有错误。在 VS 中的“输出”窗口中也不会记录任何内容。此外,更改调试>异常设置以中断所有异常也没有任何作用,因此似乎没有在任何地方抛出异常。
为什么模型绑定会失败?我错过了什么?
答:
0赞
Emre Bener
10/18/2023
#1
发生这种情况是因为该项目最初是一个剃刀页面应用程序,我后来使用 和 添加了控制器和视图,但显然将 MVC 添加到项目所需的配置并不止于此,我还需要手动创建一个文件来导入一些东西。AddControllersWithViews
MapControllerRoute
_ViewImports.cshtml
直接在文件夹下创建,并在其中,使用指令导入模型命名空间,并添加 asp.net 核心 mvc 标记助手。它看起来像:_ViewImports.cshtml
Views
@using
@using MyApp.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
需要 asp.net 标记帮助程序才能使框架识别和处理“asp-for”属性。现在模型绑定将起作用。
评论