我意识到在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”)。我需要验证所选索引(radiobuttons)应该有一个字符串。
如何在提交表单之前对其进行验证?
答案 0 :(得分:1)
由于您希望在客户端进行此操作,因此您需要IClientValidateable用于自定义逻辑或编写您自己的手动验证,而不是IvalidateableObject,它只是服务器端。但是 - 首先要尝试的是Darin的答案,这可能会让您在适当放置验证错误的情况下轻松离开。
MVC Radio Button Lists are not grouped when using the HtmlHelper class
如果这不起作用,至少知道的另一个选择是IClientValidateable ASP.NET MVC implement custom validator use IClientValidatable
如果Darin在第一个链接中的解决方案由于某种原因不起作用我认为应该这样做了。你实际上可以通过多种方式简单地离开这里
只需截取表单帖子并查询单选按钮并确保选中一个。由于理论上您可以使用多个单选按钮类型,因此可以使用选择器来确保其表单的一部分或包含类类型。如果Darin的解决方案不起作用,请告诉我,如果您需要帮助,我会提供解决方案。
在单选按钮上使用不显眼的验证。只有列表中的第一个才能获得错误。你必须使用css类解决一些魔法,但解决方案在这里: ASP.NET MVC 3 unobtrusive validation and radio buttons
答案 1 :(得分:0)
您必须实现Interface IValidatableObject检查本文才能看到示例http://msdn.microsoft.com/en-us/vs2010trainingcourse_aspnetmvccustomvalidation_topic4