c# – 如何使byte []字段必填字段正确?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 如何使byte []字段必填字段正确?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2849字,纯文字阅读大概需要5分钟。
内容图文
![c# – 如何使byte []字段必填字段正确?](/upload/InfoBanner/zyjiaocheng/792/60743e5222f440abb9751dfc652f4cb8.jpg)
我需要在模型中验证一个byte []为必需,但每当我使用Data Annotation [Required]时,它都不会做任何事情.即使我选择了一个文件,它也会输出错误信息.
细节:
模型:
Public class MyClass
{
[Key]
public int ID {get; set;}
[Required]
public string Name {get; set;}
public byte[] Image {get; set;}
[Required]
public byte[] Template {get; set;}
}
视图:
<div class="editor-label">
<%:Html.LabelFor(model => model.Image) %>
</div>
<div class="editor-field">
<input type="file" id="file1" name="files" />
</div>
<div class="editor-label">
<%:Html.Label("Template") %>
</div>
<div class="editor-field">
<input type="file" id="file2" name="files"/>
</div>
<p>
<input type="submit" value="Create" />
</p>
我查看了帖子并注意到人们使用自定义验证,但他们使用HttpPostedFileBase作为文件类型而不是像我这样的byte [],出于某种原因,当我尝试使用相同的错误时,它会丢失ID.即使模型声明了它自己的ID.
编辑:
Context – OnModelCreating Report的添加内容
modelBuilder.Entity<Report>().Property(p => p.Image).HasColumnType("image");
modelBuilder.Entity<Report>().Property(p => p.Template).HasColumnType("image");
请注意,我必须将图像作为ColumnType,因为字节数组截断长度为4000.错误.
控制器:
public ActionResult Create(Report report, IEnumerable<HttpPostedFileBase> files)
{
if (ModelState.IsValid)
{
db.Configuration.ValidateOnSaveEnabled = false;
if (files.ElementAt(0) != null && files.ElementAt(0).ContentLength > 0)
{
using (MemoryStream ms = new MemoryStream())
{
files.ElementAt(0).InputStream.CopyTo(ms);
report.Image = ms.GetBuffer();
}
}
if (files.ElementAt(1) != null && files.ElementAt(1).ContentLength > 0)
{
using (MemoryStream ms1 = new MemoryStream())
{
files.ElementAt(1).InputStream.CopyTo(ms1);
report.Template = ms1.GetBuffer();
}
}
db.Reports.Add(report);
db.SaveChanges();
//Temporary save method
var tempID = 10000000 + report.ReportID;
var fileName = tempID.ToString(); //current by-pass for name
var path = Path.Combine(Server.MapPath("~/Content/Report/"), fileName);
files.ElementAt(1).SaveAs(path);
db.Configuration.ValidateOnSaveEnabled = true;
return RedirectToAction("Index");
}
希望你可能会注意到我所缺少的东西.
解决方法:
RequiredAttribute检查null和空字符串.
public override bool IsValid(object value)
{
if (value == null)
return false;
string str = value as string;
if (str != null && !this.AllowEmptyStrings)
return str.Trim().Length != 0;
else
return true;
}
如果您的字节数组为空,这可以正常工作,但您可能也想检查一个空数组(没有看到您如何分配您的Template属性的值,我只能猜测是这种情况).您可以定义自己的必需属性来执行此检查.
public class RequiredCollectionAttribute : RequiredAttribute
{
public override bool IsValid(object value)
{
bool isValid = base.IsValid(value);
if(isValid)
{
ICollection collection = value as ICollection;
if(collection != null)
{
isValid = collection.Count != 0;
}
}
return isValid;
}
}
现在只需用我们新的RequiredCollection属性替换Template属性的Required属性.
[RequiredCollection]
public byte[] Template {get; set;}
内容总结
以上是互联网集市为您收集整理的c# – 如何使byte []字段必填字段正确?全部内容,希望文章能够帮你解决c# – 如何使byte []字段必填字段正确?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。