我遇到了一个我需要制作的问题。
带有自定义搜索按钮的主页/索引页面。
第一个案例 注册用户 - 在用户点击进行搜索后,它会重定向到部分视图的GET
Payment/Index
视图在其 UserData 内呈现,另一个部分视图使用Payment form
,用户将填写其银行数据以支付搜索费用。
第二种情况 新用户 - 在用户点击它之后,它会重定向到GET
付款/ IndexNewUser视图,其中部分视图呈现在{{ 1}}创建一个帐户和NewUser form
,Payment PartialView
用户将填写其银行数据以支付搜索费用。两个表单都在同一个提交按钮中。
在第二种情况下,我需要先注册并验证用户并在之后付款。
我想到了这些选项:
1)在Payment form
中创建ActionResult RegisteredUserPay(Payment model)
和其他ActionResult NewUerPay(NewUserPayment model)
,在第二个动作中制作两件事,注册用户并付款。
2)继续使用Payment Controller
上的ActionResult Pay(Payment model)
,当新用户提交时,将帖子发送到PaymentController
上的ActionResult CreateUser(RegisterViewModel model)
,然后制作{{} 1}}。
从架构的角度来看,这两种情况都很奇怪,因为在第一个选项中,PaymentController将负责注册用户。而在另一种情况下,我将需要创建两个基本相同的视图,但对于不同的模型。
最好的方法是什么?
答案 0 :(得分:2)
我认为你太复杂了。您只需要一个视图模型:
public class SearchPayViewModel
{
public RegisterViewModel Register { get; set; }
public Payment Payment { get; set; }
}
您只需要一个操作和一个视图。在您的视图中,只需分析用户是否经过身份验证,并且只渲染部分寄存器,如果不是:
@if (!User.Identity.IsAuthenticated)
{
@Html.Partial("_Register", model.Register)
}
在帖子上,如果没有发布任何内容,model.Register
将为null,显然如果未呈现寄存器部分,则不会发布任何内容。因此,您可以进行简单的检查,看看是否需要创建用户:
if (model.Register != null)
{
// create user
}