2

我在 MVC 3 中的几个问题上使用了万无一失的方法。具体来说,我有带有 textarea 的单选按钮,如果选择了单选按钮“是”,那么 textarea 不能为空。我对某些字段进行了其他验证,使用常规的 'Required' 属性并且工作正常,但 'RequiredIfTrue' 属性在客户端没有验证。因此,如果我填写所有字段以便它们进行验证,然后在收音机上单击“是”但将相应的文本区域留空,然后提交,表单会到达服务器而不是验证客户端。我还注意到,在浏览器中查看源代码时,直到提交表单后,'RequiredIfTrue' 属性才会添加到 HTML 中。

我正在为这个项目使用 ViewModel,这似乎是问题所在。当前属性在模型中的属性上,然后我在 ViewModel 中引用该模型并将 ViewModel 传递给 View。但是如果我将属性直接放在 ViewModel 中,它就可以正常工作。我不想要 hte 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; }

谢谢。

4

0 回答 0