我有一个ASP.NET MVC 3视图,实际上有两种形式,但它们位于相同的表单标记中。 不确定这是否是正确的方法,所以请建议是否有更好的解决方案。
用户在此单页上有两个选项。这是关于订阅时事通讯,如果用户已经有订阅号,则只需要验证其中一个“表单”。 如果用户没有订阅号,则需要验证其他表单。 我知道这可以开发得更加用户友好(和程序员),但这是客户的要求。
我的问题是,在提交表单时,所有字段当然都经过验证。某处我需要提供一个检查,看看用户是否填写了SubscriptionNumber字段,然后控制要验证的“表单”。 你有什么建议吗?我当然希望尽可能简单。
这是我的观点订阅:
@model SubscribeNewsletterModel
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.ExistingSubscriber)
@Html.EditorFor(m => m.NewSubscription)
@Html.ValidationSummary()
<input type="submit" />
}
此视图的我的视图模型如下所示:
public class SubscribeNewsletterModel
{
public SubscribeNewsletterModel(SubscriptionModel subscriptionModel,
ExistingSubscriberModel existingSubscriberModel)
{
this.NewSubscription = subscriptionModel;
this.ExistingSubscriber = existingSubscriberModel;
}
// The models contains validation logic (attributes like Required, etc.)
public SubscriptionModel NewSubscription { get; set; }
public ExistingSubscriberModel ExistingSubscriber { get; set; }
}
我的控制器负责处理POST请求。这还没有做任何事情 - 仅用于验证:
[HttpPost]
public ActionResult Subscribe(
[Bind(Prefix="NewSubscription")] SubscriptionModel newSubscriptionModel,
[Bind(Prefix="ExistingSubscriber")] ExistingSubscriberModel existingSubscriberModel)
{
var vm = new SubscribeNewsletterModel(newSubscriptionModel, existingSubscriberModel);
return View(vm);
}
答案 0 :(得分:0)
根据您的条件:“这是关于订阅时事通讯,如果用户已经有订阅号码,则只需要验证其中一个”表单“。如果用户没有订阅号,其他表格需要验证。“
在视图中创建参数,该参数将发送回您验证表单的控制器,并使用此参数来确定要验证的内容。您必须使用
ModelState
您可以删除不希望通过密钥验证的属性。