MVC 4 ViewModel not being sent back to Controller

后端 未结 9 1785
感情败类
感情败类 2020-12-08 07:17

I can\'t seem to figure out how to send back the entire ViewModel to the controller to the \'Validate and Save\' function.

Here is my controller:

[H         


        
9条回答
  •  粉色の甜心
    2020-12-08 08:06

    Can you just combine those 2 models you have? Here's how I do it with one model per view... 1. I use Display Templates from view to view so I can pass the whole model as well as leave data encrypted.. 2. Setup your main view like this...

    @model IEnumerable
    
    Select a Location:

    @foreach (var item in Model) { @Html.DisplayFor(model=>item) }

    3. Create a DisplayTemplates folder in shared. Create a view, naming it like your model your want to pass because a DisplayFor looks for the display template named after the model your using, I call mine GroupModel. Think of a display template as an object instance of your enumeration. Groupmodel Looks like this, I'm simply assigning a group to a button.

    @model LecExamRes.Models.SelectionModel.GroupModel
    @using LecExamRes.Helpers
    @using (Html.BeginForm("Index", "Home", null, FormMethod.Post))
    {
     
    }       
    

    4. Here's the Controller. *GET & POST *

    public ActionResult Index()
        {
            // Create a new Patron object upon user's first visit to the page.
            _patron = new Patron((WindowsIdentity)User.Identity);
            Session["patron"] = _patron;            
            var lstGroups = new List();
            var rMgr = new DataStoreManager.ResourceManager();
            // GetResourceGroups will return an empty list if no resource groups where    found.
            var resGroups = rMgr.GetResourceGroups();
            // Add the available resource groups to list.
            foreach (var resource in resGroups)
            {
                var group = new SelectionModel.GroupModel();
                rMgr.GetResourcesByGroup(resource.Key);
                group.GroupName = resource.Value;
                group.GroupKey = resource.Key;
                lstGroups.Add(group);
            }
            return View(lstGroups);
        }
    
        [ValidateAntiForgeryToken]
        [HttpPost]
        public ActionResult Index(SelectionModel.GroupModel item)
        {
            if (!ModelState.IsValid)
                return View();
    
            if (item.GroupKey != null && item.GroupName != null)
            {               
                var rModel = new SelectionModel.ReserveModel
                {
                    LocationKey = item.GroupKey,
                    Location = item.GroupName
                };
    
                Session["rModel"] = rModel;
            }           
    //So now my date model will have Group info in session ready to use
            return RedirectToAction("Date", "Home");
       }
    

    5. Now if I've got alot of Views with different models, I typically use a model related to the view and then a session obj that grabs data from each model so in the end I've got data to submit.

提交回复
热议问题