【问题标题】:Viewmodel with 2 viewmodels and only one required具有 2 个视图模型且仅需要一个的视图模型
【发布时间】:2013-10-01 00:24:12
【问题描述】:

我有一个 ViewModel,其中包含付款金额等内容。 用户可以通过卡或银行账户支付。

我在支付视图模型中有两个视图模型。

我想知道如何在提交表单时只能“验证”一种支付类型的视图模型(卡或银行)。

我有一个 jquery 手风琴的事情,他们可以选择卡支付或银行支付,选择后,div 展开并输入适当的信息。

每个付款类型 div 都有一个 Html.BeginForm,然后发布到正确的操作,即:

<div>
@using (Html.BeginForm("SubmitCardPayment", "Account"))
{
    // submit button here
}
</div>
<div>
@using (Html.BeginForm("SubmitBankPayment", "Account"))
{
    // submit button here
}
</div>

我确实在卡和银行支付视图模型的视图模型中实现了 IValidatableObject,以便在那里进行一些验证。但是我想知道如何在此处仅验证其中一个付款视图模型,以及是否存在明显显示错误但确保其他付款视图模型不受影响或在未输入详细信息时阻止其提交的错误,因为两种付款视图模型都具有必需的属性。

目前发生的情况是,当有提交时,我确实传递了整个视图模型(因为父视图模型包含产品 ID、支付金额等内容...)但随之而来的是付款类型视图模型

谢谢

更新 - 我还注意到,在提交任一表单时,父视图模型的数据似乎并未随之发布。不知道为什么会这样。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    好的,所以似乎可行但不合理的解决方案如下:

    创建包含支付类型的 2 个子模型的主父 VM。

    在表单上提交帖子到不同的操作,但提供更具体的视图模型(基本上是父视图模型 + 在该上下文中唯一的支付类型视图模型,如父 + 银行或父 + 卡)

    然后,如果我们有任何验证错误等...我们使用 2 个子模型创建主父 VM,映射属性并将其返回到视图。

    这确实工作得很好,但认为需要做更多的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多