大家好我怎么能将imageurl插入数据库?插入数据库后,我的imageurl行显示为NULL。
public HttpPostedFileBase ImageURL { get; set; }
my question.cshtml
<tr>
<td colspan="3">
@Html.LabelFor(model => model.ImageURL)
@Html.TextBoxFor(model => model.ImageURL, new { type = "file", id="fileupload", name="fileupload" })
@Html.ValidationMessageFor(model => model.ImageURL)
<img src="#" id="imgThumbnail" alt="preview" width="10%" height="15%" />
</td>
我的控制器
foreach (QuestionVM0 q1 in qo)
{
int aID = question1.ActivityID.Value;
string sImageURL = q1.ImageURL.ToString();
Models.question1 questionCreate = new question1();
questionCreate.ImageURL = sImageURL;
db.questions1.Add(questionCreate);
db.SaveChanges();
}
答案 0 :(得分:1)
您的实体框架模型应该有byte[]
属性映射到数据库中的varbinary(max)
列。看来目前你已经将它定义为一个错误的字符串。所以:
public class question1
{
public byte[] ImageURL { get; set; }
...
}
然后从视图模型上的HttpPostedFileBase属性中读取并将其复制到EF模型上的byte[]
属性中:
foreach (QuestionVM0 q1 in qo)
{
int aID = question1.ActivityID.Value;
byte[] imageData = null;
using (MemoryStream target = new MemoryStream())
{
q1.ImageURL.InputStream.CopyTo(target);
imageData = target.ToArray();
}
Models.question1 questionCreate = new question1();
questionCreate.ImageURL = imageData;
db.questions1.Add(questionCreate);
db.SaveChanges();
}
更新:
您似乎只想将文件的位置存储在数据库中,而不是文件本身。在这种情况下,您应该这样做:
foreach (QuestionVM0 q1 in qo)
{
int aID = question1.ActivityID.Value;
string fileName = Path.GetFileName(q1.ImageURL.FileName);
string path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
q1.ImageURL.SaveAs(path);
Models.question1 questionCreate = new question1();
questionCreate.ImageURL = path;
db.questions1.Add(questionCreate);
db.SaveChanges();
}