首页 > 解决方案 > 表单 POST 返回空模型

问题描述

我正在尝试通过表单将模型保存到我的数据库中。模型如下所示:

public class CreditCard
{
    public CardDetails cardDetails { get; set; }
    public UserDetails userDetails { get; set; }
}

public class CardDetails
{
    public string CardNumber { get; set; }
}

public class UserDetails
{
    public string Name { get; set; }
}

这是显示表单的视图,我为每个对象使用了一个视图组件CreditCard

@model CreditCard

<form asp-controller="Card" asp-action="Save" method="post">
    <button type="submit" name="save" class="btn bg-blue"></button>

    @await Component.InvokeAsync("CardDetails", Model.cardDetails)
    @await Component.InvokeAsync("UserDetails", Model.userDetails)
</form>

CardDetails 组件:

@model CardDetails

<div class="form-group">
    @Html.EditorFor(model => model.CardNumber)
</div>

这工作得很好,即组件从数据库中获取数据并且字段填充得很好。但是,当我尝试通过保存按钮 POST 时,它返回 null。这是动作(确实成功命中,但参数同时具有cardDetailsuserDetails为空:

public async Task<ActionResult> Save(CreditCard creditCard)
{
      // do stuff but creditCard.cardDetails and creditCard.userDetails are both null
}

有人能弄清楚这里有什么问题吗?

标签: c#razor

解决方案


您向服务器发送的正文与设置为使用的正文不同。

Save接受CreditCard作为参数,但您首先发送一个CardDetails对象,然后发送一个UserDetails对象。

您要么需要两种不同Save()的,一种接受CardDetails,另一种接受,UserDetails或者在发送之前构建CreditCard对象客户端。


推荐阅读