2011-07-12 56 views
0

我有一个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

根据您的病情:“这是关于订阅简讯,如果用户已经有一个预约号码,只有一个‘形式’是需要验证,如果用户没有订阅号码,则需要验证其他表单。“

在您的视图中创建参数,将返回控制器验证您的表单并使用此参数确定要验证的内容。您将必须使用

ModelState 

您可以删除不想通过密钥验证的属性。

+0

我希望能有一个更简单的解决方案,但我最终可能会这样做。我会将问题留待一两天。 –