我使用客户端验证创建自己的数据注释,以检查所选文件是否被允许,但是我无法使其工作。客户端方法不会被激发。上传文件的自定义客户端验证
我没有收到任何JavaScript错误。
型号:
public class FotoAlbumModel
{
public int AlbumId { get; set; }
[Filters.Required]
[MaxLength(150, ErrorMessage = "Dit veld mag niet langer zijn dan 150 tekens.")]
public string Titel { get; set; }
[Filters.Required]
[MaxLength(150, ErrorMessage = "Dit veld mag niet langer zijn dan 2500 tekens.")]
public string Descriptie { get; set; }
[Filters.Required]
[MaxLength(250, ErrorMessage = "Dit veld mag niet langer zijn dan 250 tekens.")]
public string Keywoorden { get; set; }
[Filters.Required]
[LinkName]
public string Linknaam { get; set; }
public bool Status { get; set; }
public int AantalFotos { get; set; }
[Filters.FileExtensions(FileExtensions = ".bmp,.jpg,.png.gif,.jpeg")]
public HttpPostedFileBase[] Fotos { get; set; }
}
我的注解:
public class FileExtensionsAttribute : ValidationAttribute, IClientValidatable
{
public string FileExtensions { get; set; }
public override bool IsValid(object value)
{
string strValue = value == null ? "" : value.ToString();
string[] arrayFileExtensions = FileExtensions.Split(',');
bool isMatch = arrayFileExtensions.Any(x => x.Contains(Path.GetExtension(strValue)));
if (!isMatch && ErrorMessage == null)
{
ErrorMessage = "De extensie van de bestand is niet toegestaan.";
}
return isMatch;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = "De extensie van de bestand is niet toegestaan.",
ValidationType = "fileextension"
};
rule.ValidationParameters.Add("allowedextensions", FileExtensions);
yield return rule;
}
}
我的自定义验证适配器:
$.validator.unobtrusive.adapters.addSingleVal("fileextension", "allowedextensions");
$.validator.addMethod("fileextension", function (value, element, allowedextensions) {
alert('sds');
var arrayAllowedExtensions = allowedextensions.split(',');
var fileExtension = value.split('.').pop();
$.each(arrayAllowedExtensions, function(extension) {
if (extension == fileExtension) {
return true;
}
});
return false;
});
HTML:
@Html.TextBoxFor(m=> m.Fotos, new {@type="file", @multiple="true", @onchange="makeFileList();", @id="filesToUpload", @style="display: none;"})
<input type="button" value="Plaatje(s) selecteren" class="btn btn-green btn-gradient" onclick="document.getElementById('filesToUpload').click();" />
<ul id="fileList">
<li>No Files Selected</li>
</ul>
@Html.ValidationMessageFor(m => m.Fotos)
MakeFileList JavaScript函数:
<script>
function makeFileList() {
var input = document.getElementById("filesToUpload");
var ul = document.getElementById("fileList");
while (ul.hasChildNodes()) {
ul.removeChild(ul.firstChild);
}
for (var i = 0; i < input.files.length; i++) {
var li = document.createElement("li");
li.innerHTML = input.files[i].name;
ul.appendChild(li);
}
if(!ul.hasChildNodes()) {
var li = document.createElement("li");
li.innerHTML = 'No Files Selected';
ul.appendChild(li);
}
}
</script>
为什么该方法不被解雇了任何想法?
您可以显示makeFileList()JS功能,并与数据注释模型属性吗? – markpsmith
@markpsmith我编辑了我的评论。 – Jamie
我看不到makeFileList()函数 – markpsmith