我有一个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);
}
我希望能有一个更简单的解决方案,但我最终可能会这样做。我会将问题留待一两天。 –