我正在尝试通过表单发布将模型保存到数据库中。该模型如下所示:
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。这是操作(确实成功命中,但是参数同时将cardDetails
和userDetails
都设置为null:
public async Task<ActionResult> Save(CreditCard creditCard)
{
// do stuff but creditCard.cardDetails and creditCard.userDetails are both null
}
有人可以找出这里的问题吗?
答案 0 :(得分:2)
您要向服务器发送的正文不同于设置要使用的正文。
<v-container fluid grid-list-xl>
以Save
作为参数,但是您首先要发送一个CreditCard
对象,然后发送一个CardDetails
对象。
您要么需要两个不同的UserDetails
,一个需要Save()
,另一个需要CardDetails
,或者在发送之前构造UserDetails
客户端对象。