表单POST返回空模型

时间:2019-01-08 22:14:20

标签: c# razor

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

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都设置为null:

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

有人可以找出这里的问题吗?

1 个答案:

答案 0 :(得分:2)

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

<v-container fluid grid-list-xl>Save作为参数,但是您首先要发送一个CreditCard对象,然后发送一个CardDetails对象。

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