Viewmodel有2个视图模型,只需要一个

时间:2013-09-25 12:05:05

标签: asp.net-mvc

我有一个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,支付金额等等...)但随之而来的是付款类型视图模型

感谢

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

1 个答案:

答案 0 :(得分:0)

好的,所以似乎有效的解决方案,但不是它的优点,如下:

创建主要的父虚拟机,其中包含2种支付类型的子模型。

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

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

这确实很有效,但认为需要更多的工作。