2016-10-03 6 views
0

verwende, muss ich Bild in asp mvc 5 hochladen.Modell nicht ausfüllen Wenn ich HttpPostedFileBase

aber wenn ich Bild auswählen, zeigen Sie mich in The UserPhoto field is required..

dies mein Code:

public async Task<ActionResult> Register(RegisterViewModel model, HttpPostedFileBase pic) 
    { 
     if (ModelState.IsValid) 
     { 
      if (pic != null) 
      { 
       pic = Request.Files[0]; 
       var ext = System.IO.Path.GetExtension(pic.FileName); 
       if (ext == ".jpg" || ext == ".png" || ext == ".jpeg") 
       { 
        string filename = model.Name + model.PhoneNumber + ext; 
        pic.SaveAs(@"~/Image/" + filename); 
        model.UserPhoto = filename; 
       } 
      } 
      var user = new ApplicationUser { Name = model.Name, Family = model.Family, PhoneNumber = model.PhoneNumber, UserName = model.Email, Email = model.Email}; 

      user.UserPhoto=model.UserPhoto; 
      var result = await UserManager.CreateAsync(user, model.Password); 
      if (result.Succeeded) 
      { 
       await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); 
       return RedirectToAction("Index", "Home"); 
      } 
      AddErrors(result); 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

enter image description here

enter image description here

HttpPostedFileBase pic ist Wert haben, aber Modell ist null.

Wie kann ich dieses Problem lösen?

Antwort

1

Nun, zuerst scheint es, Sie meinen model.UserPhoto ist Null, da model sehr deutlich einen Wert hat, wie die meisten seiner Eigenschaften, außer UserPhoto.

Die Frage ist also, Sie schreiben etwas mit dem Namen UserPhoto in Ihrem Formular? Wenn nicht, dann ist es natürlich null. Die einzigen Dinge, die nach dem Post festgelegt werden, sind Eigenschaften, die tatsächlich gepostet wurden. Alles andere ist entweder Null oder der Standardwert des Typs, wenn es keine Nullwerte gibt (d. H. 0 für int).

Allerdings sollten Sie es nicht brauchen. Zunächst scheint dies eine "create" -Ansicht zu sein, so dass UserPhoto zunächst keinen Wert hat. Wenn pic eingestellt ist, wird UserPhoto auf diesen Wert gesetzt, ansonsten wurde nichts hochgeladen, und UserPhotosollte null sein. Wenn dies eine "Bearbeitungsansicht" wäre, würden Sie lediglich eine Kopie des Benutzers aus der Datenbank ziehen (die die aktuelle UserPhoto enthält). Sie würden es nur noch einmal ändern, wenn pic gepostet wurden.

EDIT

Der Fehler ist, weil Sie UserPhoto Satz nach Bedarf haben. Entfernen Sie einfach diese Validierung. Oder Sie können einfach pic loswerden und direkt an UserPhoto senden.

+0

in form name ist pic, aber un controller name ist userphoto, danke – Kianoush

+0

Nein. In controller ist der name 'pic' auch, weil du das als param hast. Unabhängig davon muss der Name der Eigenschaft form und action param/model übereinstimmen. Wenn Sie möchten, dass der Wert in "UserPhoto" übernommen wird, muss Ihre Eingabe in Ihrem Formular auch "UserPhoto" lauten. –