3

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

这是模型,其中我有一个集合属性Choices(这一直有 5 个元素),CorectChoice集合中的选定索引在哪里。

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; }
}

这是视图,请观看演示。

在此处输入图像描述

    <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>

请注意,用户可以在输入中留下空字符串(type="text")。我需要验证所选索引(单选按钮)是否应该有一个字符串。

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

4

2 回答 2

1

由于您希望在客户端这样做,因此您需要 IClientValidateable 用于自定义逻辑或编写您自己的手动验证,而不是 IvalidateableObject ,它只是服务器端。但是 - 首先要尝试的是 Darin's answer here,通过正确放置验证错误,它可能会让你很容易离开。

使用 HtmlHelper 类时,MVC 单选按钮列表未分组

如果这不起作用,至少要知道另一个选项是 IClientValidateable ASP.NET MVC 实现自定义验证器使用 IClientValidatable

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

  1. 只需拦截表单发布并查询单选按钮并确保选中一个。由于理论上您可以拥有多个单选按钮类型,因此您可以使用选择器来确保它是表单的一部分或包含类类型。如果达林的解决方案不起作用,请告诉我,如果您需要帮助,我会提供解决方案。

  2. 在单选按钮上使用不显眼的验证。虽然只有列表中的第一个会得到错误。您将不得不使用 css 类解决一些小问题,但解决方案在这里: ASP.NET MVC 3 unobtrusive validation and radio buttons

于 2013-03-02T04:24:22.843 回答
0

你必须实现接口 IValidatableObject 检查这篇文章可以看到一个例子http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvccustomvalidation_topic4

于 2013-03-02T00:50:44.883 回答