Je suis nouveau à ASP.NET MVC, alors veuillez excuser des erreurs.Comment afficher/stocker et récupérer l'image comme varbinary (MAX) en utilisant ASP.NET MVC view
J'ai besoin d'une page d'affichage (index.cshtml
) où je peux afficher l'image, modifier/supprimer l'image en la stockant dans une colonne Varbinary(max)
dans une table SQL Server.
Il y a ces colonnes dans la table de base de données:
ID int primary key Identity not null,
ImageName nvarchar(50) ,
ImagePicInBytes varbinary(MAX) null
J'utilise un Image.cs
avec ce code:
public class Image
{
public int ID {get; set;}
public string ImageName {get; set;}
public byte[] ImagePicInBytes {get; set;}
}
ImageContext
classe comme ci-dessous
public class ImageContext : DbContext
{
public DbSet<Image> Images { get; set; }
}
chaîne de connexion comme ci-dessous
<connectionStrings>
<add name="ImageContext"
connectionString="server=.; database=Sample; integrated security =SSPI"
providerName="System.Data.SqlClient"/>
</connectionStrings>
ImageController
comme ci-dessous
public class ImageController : Controller
{
private ImageContext db = new ImageContext();
// GET: /Image/
public ActionResult Index()
{
return View(db.Images.ToList());
}
// GET: /Image/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
return View(image);
}
}
ont créé des vues comme ci-dessous
public class ImageController : Controller
{
private ImageContext db = new ImageContext();
// GET: /Image/
public ActionResult Index()
{
return View(db.Images.ToList());
}
// GET: /Image/Edit/5
public ActionResult Edit(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
return View(image);
}
// GET: /Image/Delete/5
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Image image = db.Images.Find(id);
if (image == null)
{
return HttpNotFound();
}
return View(image);
}
// POST: /Image/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
Image image = db.Images.Find(id);
db.Images.Remove(image);
db.SaveChanges();
return RedirectToAction("Index");
}
}
}
Mon create.cshtml (vue) comme ci-dessous
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.ImageName)
</th>
<th>
@Html.DisplayNameFor(model => model.ImagePicInBytes)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.ImageName)
</td>
<td>
@Html.DisplayFor(modelItem => item.ImagePicInBytes)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
Je les 3 ci-dessous les questions
Comment puis-je créer un nouvel enregistrement dans datatable en téléchargeant une nouvelle image à partir du système de fichiers à la colonne
Varbinary
dans la base de données?Comment puis-je avoir la vue d'avoir le contrôle FileUpload dans la « Créer une vue » et « vue Edition »
Puis-je utiliser
HttpPostedFileBase
pour réaliser ce qui précède deCreate.cshtml
? Si oui: comment? Des suggestions ou des liens de référence disponibles?
Je pense que vous devez diviser cette question en plus petits problèmes plus facilement identifiables. Vous devez publier des questions avec un seul problème et la plus petite quantité de code pouvant reproduire le problème. http://stackoverflow.com/help/how-to-ask – Mick