2013-03-02 62 views
3

我意识到在MVC4中使用验证属性来执行此任务。但知道我正在处理不同的情况。如何在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; } 
} 

这里是视图,观看演示文稿。

enter image description here

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

注意,用户可以在离开输入空字符串(类型= “文本”)。我需要验证选定的索引(单选按钮)应该有一个字符串。

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

回答

2

在客户端,你需要IClientValidateable自定义逻辑或写自己的手工验证,不IvalidateableObject这是只有服务器端。然而,首先要尝试的是达林的答案,这可能会让你很容易地认识到错误的确切位置。

MVC Radio Button Lists are not grouped when using the HtmlHelper class

如果不工作的另一种选择至少知道是IClientValidateable ASP.NET MVC implement custom validator use IClientValidatable

如果Darin的第一链路解决方案上面没有出于某种原因,我相信它应该)实际上,你可以逃脱这里相当简单以多种方式

  1. 只需截取表单提交和查询单选按钮,并确保一个被选中。由于理论上可以有多个单选按钮类型,因此可以使用选择器来确保其表单的一部分或包含类类型。如果Darin的解决方案无法解决问题,请告诉我,如果您需要帮助,我会提供解决方案。

  2. 在单选按钮上使用不显眼的验证。只有列表中的第一个会出错。你将不得不解决一些与CSS类魔法,但解决方案在这里: ASP.NET MVC 3 unobtrusive validation and radio buttons

相关问题