2016-07-26 5 views
1

Здесь у меня есть MainController, в котором у меня есть два действия с именем Create и PhotoUpload. Вот код для действия Create.Как разместить представление в другом представлении в asp.net MVC?

// GET: Main/Create 
     public ActionResult Create() 
     { 
      return View(); 
     } 

     // POST: Main/Create 
     // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
     // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create([Bind(Include = "Email,Password,FirstName,LastName,Gender,Birthday,ProfileImage,AboutUser")] User user) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Users.Add(user); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(user); 
     } 

Вот код для действия PhotoUpload.

 [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult PhotoUpload(PhotoModel model) 
     { 
      if (model.PhotoFile.ContentLength > 0) 
      { 
       var fileName = Path.GetFileName(model.PhotoFile.FileName); 
       var filePath = Server.MapPath("/Content/Users/Images"); 
       string savedFileName = Path.Combine(filePath, fileName); 
       model.PhotoFile.SaveAs(savedFileName); 

      } 
      return View(model); 
     } 

     public ActionResult PhotoUpload() 
     { 
      return View(); 
     } 

И это модели пользователей и фотографий. Это модель пользователя

public partial class User 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
     public User() 
     { 
      this.Friends = new HashSet<Friend>(); 
      this.Friends1 = new HashSet<Friend>(); 
      this.Photos = new HashSet<Photo>(); 
     } 

     public int UserId { get; set; } 
     public string Email { get; set; } 
     public string Password { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Gender { get; set; } 
     public System.DateTime Birthday { get; set; } 
     public string ProfileImage { get; set; } 
     public string AboutUser { get; set; } 

     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Friend> Friends { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Friend> Friends1 { get; set; } 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
     public virtual ICollection<Photo> Photos { get; set; } 
    } 

Это фотомодели

public class PhotoModel 
    { 
     [Required] 
     public HttpPostedFileBase PhotoFile { get; set; } 
    } 

И это то, что я получаю как вид в настоящее время. Это мой/Главный/Создать Просмотреть enter image description here

И это мой/Главный/PhotoUpload Посмотреть

enter image description here

Теперь я хочу поставить эту точку зрения PhotoUpload вместо ProfileImage вещей внутри моего Create View. Где я могу изменить это и как?

+0

Вы можете использовать встроенные в конвенциях? '@ Html.EditorFor (x => x.PhotoFile)' – mxmissile

+0

Ну, я только сохраняю строку (адрес) фотографии в моей базе данных и добавляю фотографию (.jpg или что-то еще) в папку всякий раз, когда делаю операции с базой данных , Поэтому я не могу использовать это соглашение, так как я только сохраняю строку в своей базе данных. –

+0

Возможно использование '@ Html.Action' – Hackerman

ответ

1

Вы должны использовать ViewModel, как это рекомендуемая практика для передачи данных в и из представлений, в этом случае вы можете сделать следующее, как @StephenMuecke прокомментировал

ViewModel

public class UserViewModel 
{ 
    public string Email { get; set; } 
    public string Password { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Gender { get; set; } 
    public System.DateTime Birthday { get; set; } 
    public string ProfileImage { get; set; } 
    public string AboutUser { get; set; } 
    [Required] 
    public HttpPostedFileBase PhotoFile { get; set; } 
} 

контроллер

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create(UserViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     AddUser(model); 
     SavePhoto(model.PhotoFile); 
     return RedirectToAction("Index"); 
    } 
    return View(user); 
} 
private void SavePhoto(HttpPostedFileBase file) 
{ 
    if (file.ContentLength > 0) 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     var filePath = Server.MapPath("/Content/Users/Images"); 
     string savedFileName = Path.Combine(filePath, fileName); 
     file.SaveAs(savedFileName); 
    } 
} 
private void AddUser(UserViewModel model) 
{ 
    var user = new User 
    { 
     Email = model.Email, Password = model.Password, FirstName = model.FirstName, LastName = model.LastName, Gender = model.Gender, Birthday = model.Birthday, ProfileImage = model.ProfileImage, AboutUser = model.AboutUser 
    }; 
    db.Users.Add(user); 
    db.SaveChanges(); 
} 

Для дальнейшего чтения:

Смежные вопросы