How to edit multiple models in a single Razor View

后端 未结 3 1742
小鲜肉
小鲜肉 2020-12-01 11:51

I am new to MVC3, I have an multiple models like BussinessDetails,ContactPerson,ServiceArea,Address and many more models.

3条回答
  •  庸人自扰
    2020-12-01 12:01

    You'll need to create a View Model that contains both of the types that you need. Something like this (assuming you're editing both an Album and an Artist):

    public class MyModel
    {
        public Album Album { get; set; }
        public Artist Artist { get; set; }
        public SelectList Genres { get; set; }
        public SelectList Artists{ get; set; }
    }
    

    Then change your view to use the new model like so:

    @model MyModel
    

    Then change your Get method to be something like:

    public ActionResult Edit(int id) 
    {
        var model = new MyModel();
        model.Album = db.Albums.Find(id);
        model.Artist = yourArtist; //whatever you want it to be
        model.Genres = new SelectList(db.Genres, "GenreId", "Name", model.Album.GenreId);
        model.Artists = new SelectList(db.Artists, "ArtistId", "Name", model.Album.ArtistId);
    
        return View(model);
    }  
    

    Then change your Post method to take the MyModel type:

    [HttpPost]
    public ActionResult Edit(MyModel model) {
    
        if (ModelState.IsValid) {
        //save your items here
    
            db.SaveChanges();
    
            return RedirectToAction("Index");
        }
    
        model.Genres = new SelectList(db.Genres, "GenreId", "Name", model.Album.GenreId);
        model.Artists = new SelectList(db.Artists, "ArtistId", "Name", model.Album.ArtistId);
    
        return View(album);
    }      
    

    Assuming your view has something like (wrapped in a form with a submit button of course):

    @Html.EditorFor(m => m.Artist.Name) //do this for all Artist Fields
    @Html.EditorFor(m =? m.Album.Name) //do this for all Album Fields
    
    //the following two show you how to wire up your dropdowns:
    @Html.DropDownListFor(m => m.Album.ArtistId, Model.Artists)
    @Html.DropDownListFor(m => m.Album.GenreId, Model.Genres)
    

提交回复
热议问题