mvc万无一失的验证客户端脚本直到表单提交后才显示

时间:2012-10-11 19:04:09

标签: asp.net-mvc

我在MVC 3中的几个问题上使用万无一失。具体来说,我有带textarea的单选按钮,如果选中单选按钮'Yes',则textarea不能为空。我在某些字段上进行了其他验证,使用常规的“必需”属性,这些工作正常,但'RequiredIfTrue'属性不在客户端验证。因此,如果我填写所有字段以便他们验证,然后在收音机上单击是,但将相应的textarea留空,然后提交,表单将命中服务器而不是验证客户端。我还注意到在浏览器中查看源时,在提交表单之前,不会将'RequiredIfTrue'属性添加到HTML中。

我正在为这个项目使用ViewModel,这似乎是个问题。显然,属性位于模型中的属性上,然后我在ViewModel中引用该模型并将ViewModel传递给View。但是,如果我将属性直接放在ViewModel中,它可以正常工作。我不希望使用ViewModel中的属性,因为我不需要向ViewModel添加某种映射代码,因此属性与正确的模型/表相关联吗?

这些是项目中包含的脚本:

<link href="@Url.Content("~/Content/mvc.css")" rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/jquery-ui-1.8.22.custom.css")" rel="Stylesheet"" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-1.8.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.22.custom.min.js")" type="text/javascript""></script>
<script src="@Url.Content("~/Scripts/HistoryArrayTables.js")" type="text/javascript""></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/mvcfoolproof.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MvcFoolproofJQueryValidation.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MvcFoolproofValidation.min.js")" type="text/javascript"></script>

以下是该模型的一部分:

using Foolproof;

namespace EligibityForm.Models
{
[MetadataType (typeof(HistoryMetadata))]
public partial class History
{
}

public class HistoryMetadata
{

    [StringLength(2000)]
    [RequiredIfTrue("HasComment", ErrorMessage="Please enter an explanation")]
    [Display(Name = "Have you EVER been subject to a lawsuit?")]
    public string Comment { get; set; }

    public bool HasComment { get; set; }
}

这是ViewModel的一部分:

using Foolproof;

namespace EligibityForm.Models.CompositeModels
{
    public class HistoryViewModel
    {
        public History HistoryModel { get; set; }

感谢。

0 个答案:

没有答案