我需要驗證我的模型中的byte[]
爲Required
,但每當我使用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聲明。
編輯:
語境 - OnModelCreating
增加了Report
modelBuilder.Entity<Report>().Property(p => p.Image).HasColumnType("image");
modelBuilder.Entity<Report>().Property(p => p.Template).HasColumnType("image");
注意,我必須把image
作爲ColumnType
因爲Byte array truncation to a length of 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");
}
希望你會發現我錯過了什麼。
好吧,很明顯,事情正在發生。你能檢查這些東西:1.在'report.Template = ms1.GetBuffer();放置一個斷點;'這行是否被執行? 2.在調用SaveChanges()之前,'report.Template'的值是多少?(它是否爲null,或者它是否具有長度大於0的值)?報告是否完全寫入數據庫,只有模板是空的,或根本沒有寫入任何內容? –
此外,請嘗試從屬性中一起移除'RequiredAttribute',看看會發生什麼。 –
如果我從模型中刪除了[[Required]],它會起作用,並且不會保存任何內容,所以我猜測值有問題。我會調試並讓你知道。對不起,遲到的回覆我昨天離開了。 – rexdefuror