根据用户输入控制要验证的字段

时间:2011-07-12 08:20:46

标签: validation asp.net-mvc-3

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

1 个答案:

答案 0 :(得分:0)

根据您的条件:“这是关于订阅时事通讯,如果用户已经有订阅号码,则只需要验证其中一个”表单“。如果用户没有订阅号,其他表格需要验证。“

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

ModelState

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