【问题标题】:data annotation and input[file]数据注释和输入[文件]
【发布时间】:2014-09-18 08:57:21
【问题描述】:

我有一个带有数据注释属性的视图模型

public class vm{
[Required(AllowEmptyStrings=false,ErrorMessage="message 1")]
        public string Name { set; get; }

        [RegularExpression("([0-9]+)", ErrorMessage = "message 2")]
        public int Period { set; get; }

[Required(ErrorMessage = "message 3")]
        [RegularExpression(@"^(\.xls|\.xlsx)$", 
            ErrorMessage = "message 3")]
        public string Extension { set; get; }
}

Period 字段绑定到下拉列表,使用此字段,内置客户端验证工作正常。

@Html.DropDownListFor(x => x.Period, Model.Periods, new { @class = "form-control", name = "period" })

我可以通过 ValidationSummary 或 ValidationMessageFor 得到错误信息。

现在我遇到的问题是扩展名和名称字段。它们由我提交的文件中的自定义活页夹填充。

 <input type="file" name="file" />

如何手动将这两个字段绑定到jquery不显眼的客户端验证可以工作的输入文件标签?

更新

刚才我发现了如何使用内置助手生成输入[文件]:

@Html.TextBoxFor(x => x.Extension, new { type = "file" }) 

但现在的问题是,我怎样才能将第二个字段也绑定到它? 我只想将单个输入绑定到视图模型中的两个字段。我怎样才能做到这一点? 即使使用隐藏字段,它似乎也不起作用:

@Html.HiddenFor(x=>x.Name)

【问题讨论】:

  • 如果您不为NameExtension 呈现输入,则无法将ValidationMessageFor 与它们关联。

标签: asp.net-mvc-5 unobtrusive-validation


【解决方案1】:

我想我明白了。 它使用隐藏字段的解决方案,但验证插件必须配置为不忽略它们。

@Html.HiddenFor(x=>x.Name)

在脚本中

$('form').validate().settings.ignore = [];

如果有更好的方法,我想看看。

【讨论】:

  • 您对ignore 使用了正确的设置,因此它不会忽略任何内容。
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多