c# - 表单 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。这是动作(确实成功命中,但参数同时具有cardDetails
和userDetails
为空:
public async Task<ActionResult> Save(CreditCard creditCard)
{
// do stuff but creditCard.cardDetails and creditCard.userDetails are both null
}
有人能弄清楚这里有什么问题吗?
解决方案
您向服务器发送的正文与设置为使用的正文不同。
Save
接受CreditCard
作为参数,但您首先发送一个CardDetails
对象,然后发送一个UserDetails
对象。
您要么需要两种不同Save()
的,一种接受CardDetails
,另一种接受,UserDetails
或者在发送之前构建CreditCard
对象客户端。
推荐阅读
- javascript - 为什么 SaveSvgAsPng 不支持标签
- php - 为什么在对每个请求使用 session_regenerate_id() 时打开一个新选项卡会导致先前选项卡中的页面被注销?
- java - Eclipse 自动完成方法变量
- python - 从数据框中删除多列
- swift - 传递传递的绑定 (@Binding)
- python - 单击按钮仅适用于浏览器放大 100%,但不适用于其他缩放设置(如 90%、80%、70%)
- loops - Latex - 在使用 foreach 循环时标记表
- javascript - 车把未填充模板
- python - 序列化程序字段可能命名不正确,并且与 `dict` 实例上的任何属性或键都不匹配。\n原始异常文本为:'ilan_no'
- c# - 如何在 ASP.NET 控制器方法中显式