@Html.HiddenFor does not work on Lists in ASP.NET MVC

后端 未结 13 916
灰色年华
灰色年华 2020-11-27 15:13

I\'m using a model that contains a List as a property. I\'m populating this list with items i grab from SQL Server. I want the List to be hidden in the view and passed to th

13条回答
  •  难免孤独
    2020-11-27 15:51

    I've just found out (after a couple of hours of trying to figure out why model values weren't going back to the controller) that hidden for should follow the EditorFor.

    Unless I am doing something else wrong this is what I found. I will not make the mistake again.

    In the context of a Model that contains a list of another class.

    This will NOT work:

            @{
                for (int i = 0; i < Model.Categories.Count; i++)
                {
                    
                        
                            @Html.HiddenFor(modelItem => Model.Categories[i].Id)
                            @Html.HiddenFor(modelItem => Model.Categories[i].ProductCategoryId)
                            @Html.HiddenFor(modelItem => Model.Categories[i].CategoryName)                            
                            @Html.DisplayFor(modelItem => Model.Categories[i].CategoryName)                            
                        
                        
                            @Html.HiddenFor(modelItem => Model.Categories[i].DailyPurchaseLimit)                                                        
                            @Html.EditorFor(modelItem => Model.Categories[i].DailyPurchaseLimit)
                            @Html.ValidationMessageFor(modelItem => Model.Categories[i].DailyPurchaseLimit)
                        
                        
                            @Html.HiddenFor(modelItem => Model.Categories[i].IsSelected)                            
                            @Html.EditorFor(modelItem => Model.Categories[i].IsSelected)
                        
                    
                }
            }
    

    Where as this WILL......

                for (int i = 0; i < Model.Categories.Count; i++)
                {
                    
                        
                            @Html.HiddenFor(modelItem => Model.Categories[i].Id)
                            @Html.HiddenFor(modelItem => Model.Categories[i].ProductCategoryId)
                            @Html.HiddenFor(modelItem => Model.Categories[i].CategoryName)                            
                            @Html.DisplayFor(modelItem => Model.Categories[i].CategoryName)                            
                        
                        
                            @Html.EditorFor(modelItem => Model.Categories[i].DailyPurchaseLimit)
                            @Html.HiddenFor(modelItem => Model.Categories[i].DailyPurchaseLimit)                            
                            @Html.ValidationMessageFor(modelItem => Model.Categories[i].DailyPurchaseLimit)
                        
                        
                            @Html.EditorFor(modelItem => Model.Categories[i].IsSelected)
                            @Html.HiddenFor(modelItem => Model.Categories[i].IsSelected)                            
                        
                    
                }
    

提交回复
热议问题