J'ai un contrôleur dans lequel j'ai Create méthode. Mon but est de télécharger l'image avec le nom et le service impliqué pour une personne en particulier.Mon code est parfaitement bien.Mais Je frappe l'erreur "Référence d'objet non défini à l'instance d'un objet" à la ligne "if (leader.Fichier.ContenuLongueur> (2 * 1024 * 1024))" dans le contrôleur.Le code est parfaitement bien.S'il vous plaît laissez moi savoir où je fais erreurObjet Refernce n'est pas mis à l'instance d'un objet -mvc4
Je classe modèle comme celui-ci:
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
[Required(ErrorMessage="The Name is required")]
[MaxLength(20,ErrorMessage="The Maximum characters allowed is 20")]
[MinLength(4,ErrorMessage="The Minimum charcaters allowed is 4")]
public string Name { get; set; }
[Required(ErrorMessage="Picture is required")]
public byte[] Picture { get; set; }
public int ImageSize { get; set; }
[NotMapped]
public HttpPostedFileBase File { get; set; }
public int MinistryID { get; set; }
[ForeignKey("MinistryID")]
public virtual Ministry Ministry { get; set; }
Je classe contrôleur avec méthode de création comme ceci:
public ActionResult Create()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Leader leader)
{
if (leader.File.ContentLength > (2 * 1024 * 1024))
{
ModelState.AddModelError("CustomError", "File size must be
less than 2 MB");
return View();
}
if (!(leader.File.ContentType == "image/jpeg" ||
leader.File.ContentType == "image/gif"))
{
ModelState.AddModelError("CustomError", "File type allowed :
jpeg and gif");
return View();
}
leader.ImageSize = leader.File.ContentLength;
byte[] data = new byte[leader.File.ContentLength];
leader.File.InputStream.Read(data, 0,
leader.File.ContentLength);
leader.Picture = data;
if(ModelState.IsValid)
{
db.Leaders.Add(leader);
db.SaveChanges();
}
return View(leader);
}
}
La vue de la méthode Create est:
@model ChurchWebsite.Models.Leader
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Leader</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div>
@Html.LabelFor(model=>model.Picture)
</div>
<div>
@using (Html.BeginForm("Upload","Image", FormMethod.Post,new{enctype="multipart/form-data"}))
{
@Html.TextBoxFor(Model=> Model.File, new{type="file",enctype="multipart/form-data"})
@Html.ValidationMessage("CustomError")
</div>
<div class="editor-label">
@Html.LabelFor(model => model.MinistryID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.MinistryID)
@Html.ValidationMessageFor(model => model.MinistryID)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Code _My est parfaitement good_ Non pas! Parce que 'File' est' null' (vous n'avez pas de contrôle de formulaire pour télécharger un fichier) –
Copie possible de [Qu'est-ce qu'une exception NullReferenceException et comment la réparer?] (Http://stackoverflow.com/questions/ 4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –
Et le modèle dans la vue est typeof 'Ministry' mais la méthode POST que vous avez montrée lie à typeof' Leader' Vous n'avez pas même montré le bon code! –