c# - 如何调试 ASP.NET Core MVC 数据绑定(bind)?

标签 c# data-binding asp.net-core-mvc

我遇到了一个奇怪的问题,我有大量的复选框需要发布到服务器,但我需要这些带有 id 的复选框的一些隐藏字段才能在服务器端进行正确的映射。

我有这样的东西(自由双手,所以可能存在拼写错误)

MyVm
{
  public string Id { get; set; }
  public string SecondaryId { get; set; }
  public bool IsSelected { get; set; }  
  public string Name { get; set; }
}

我收集了这些内容并发送到我的 View

在我看来,我有

@foreach(var vm in vms) {
      <div>
         @{ var guid  = Guid.New() }
         @Html.Hidden("Index", guid, new {id = $"Index[{guid}]"})
         @Html.Hidden($"[{guid}.Id", vm.Id)
         @Html.Hidden($"[{guid}].SecondaryId", vm.SecondaryId)
         @(Html.Kendo().CheckBox().Name($"[{guid}].IsSelected")).Label(vm.Name).Checked(vm.IsSelected)
       <div>
}

现在在我的 Controller 中我有

[HttpPost]
public ActionResult Edit(List<MyVm> vms)
{
   // do some stuff
}

现在,当我发表帖子时(我的代码包含在表单标签中)“vms”为空。

当我注释掉

   @foreach(var vm in vms) {
      <div>
         @{ var guid  = Guid.New() }
         @Html.Hidden("Index", guid, new {id = $"Index[{guid}]"})
       @*  @Html.Hidden($"[{guid}.Id", vm.Id) *@
         @Html.Hidden($"[{guid}].SecondaryId", vm.SecondaryId)
         @(Html.Kendo().CheckBox().Name($"[{guid}].IsSelected")).Label(vm.Name).Checked(vm.IsSelected)
       <div>
}

我的模型绑定(bind)成功。

如果我注释掉

   @foreach(var vm in vms) {
      <div>
         @{ var guid  = Guid.New() }
         @Html.Hidden("Index", guid, new {id = $"Index[{guid}]"})
       @Html.Hidden($"[{guid}.Id", vm.Id) 
        @*   @Html.Hidden($"[{guid}].SecondaryId", vm.SecondaryId)*@
         @(Html.Kendo().CheckBox().Name($"[{guid}].IsSelected")).Label(vm.Name).Checked(vm.IsSelected)
       <div>
}

我的模型也绑定(bind)成功。

因此,无论出于何种原因,将两者都取消注释会导致我的模型为空,但其中一个会导致模型绑定(bind)。

如何调试这样的东西?

最佳答案

您可以检查 Controller 方法中的ModelState属性来检查模型绑定(bind)失败的原因。

    [HttpPost]
    public IActionResult Edit([FromBody] List<MyVm> vms)
    {
        // do some stuff
        var model = this.ModelState;

enter image description here

使用 Postman 进行测试

enter image description here

在 Controller 中调试

enter image description here

关于c# - 如何调试 ASP.NET Core MVC 数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66016564/

相关文章:

c# - public DialogResult ShowDialog() 帮助!

android - textView 上的数据绑定(bind)空指针异常

wpf - 将 ListBox 绑定(bind)到另一个 ListBox

c# - 如何将数据库中的数据添加到 ASP.NET Core MVC (.NET 6) 应用程序中的共享 _Layout.cshtml 中?

asp.net-core - MVC6 支持预编译 View 吗?

c# - bool 字段的非侵入性客户端验证在 ASP.NET Core MVC 中不起作用

c# - 如何在 C# 中使用字符串生成器为控件添加 css 文件?

c# - 使用 Crypto-JS 和 C# 解密的 AES 加密 - 避免 "Padding is invalid and cannot be removed."

c# - Apple 登录 - 验证 ID token

java - 具有字段名称和值的 XML 以响应无法从字段中检索的映射 Java 对象