C# 如何在MVC4中创建自定义验证?

C# 如何在MVC4中创建自定义验证?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我意识到在MVC4中使用验证属性来执行此任务。但我知道我正在处理一个不同的情况 这是一个模型,其中我有一个集合属性Choices(它始终有5个元素)和corectoice,其中是集合中选定的索引 public class MultipleChoiceQuestionTemplate : QuestionTemplate { public MultipleChoiceQuestionTemplate() { ... } [DisplayName("Question")]

我意识到在MVC4中使用验证属性来执行此任务。但我知道我正在处理一个不同的情况

这是一个模型,其中我有一个集合属性
Choices
(它始终有5个元素)和
corectoice
,其中是集合中选定的索引

public class MultipleChoiceQuestionTemplate : QuestionTemplate
{
    public MultipleChoiceQuestionTemplate() { ... }

    [DisplayName("Question")]
    public string QuestionText { get; set; }
    public List<string> Choices { get; set; }

    [DisplayName("Correct Choice")]
    public int CorrectChoice { get; set; }
}
公共类MultipleChiceQuestionTemplate:QuestionTemplate
{
公共多回音问题模板(){…}
[显示名称(“问题”)]
公共字符串QuestionText{get;set;}
公共列表选项{get;set;}
[显示名称(“正确选择”)]
公共选择{get;set;}
}
这是视图,请观看演示

    <div id="choices">
    @for (int i = 0; i < Model.Choices5.Count; i++) {
        <div class="choice-container" style="display: block;">
        @Html.TextBoxFor(model => model.Choices5[i])
        @Html.RadioButtonFor(model => model.CorrectChoice, i)
        </div>
    }   
    </div>


@对于(int i=0;imodel.Choices5[i])
@RadioButton(model=>model.CorrectChoice,i)
}   
请注意,用户可以在输入中保留空字符串(type=“text”)。我需要验证所选索引(单选按钮)是否应该有字符串


在提交到表单之前,我如何验证它?

您必须实现界面IValidatableObject检查本文中的内容,可以看到一个示例

因为您希望在客户端实现此功能,您需要IClientValidateable用于自定义逻辑或编写自己的手动验证,而不是IvalidateableObject,它只是服务器端。然而,首先要尝试的是Darin的答案,它可能会让你很简单地通过正确地放置验证错误而逃脱

如果这不起作用,至少需要知道的另一个选项是IClientValidate

如果Darin在第一个链接中的解决方案由于某种原因不起作用,我相信它应该起作用),那么实际上,您可以通过多种方式简单地离开这里

  • 只需截取表单帖子并查询单选按钮,并确保选中一个。由于理论上可以有多个单选按钮类型,因此可以使用选择器确保其属于表单的一部分或包含类类型。如果Darin的解决方案不起作用,请告诉我,如果您需要帮助,我会提供解决方案

  • 在单选按钮上使用不引人注目的验证。但是,只有列表中的第一个才会得到错误。您必须解决css类的一些问题,但解决方案如下: