How to transfer a list from a view to a controller?

I have a view and inside I create a list, but I can not successfully pass it to the controller without fields that are null:

code in my view:

@using (Html.BeginForm("AddFOP", "Revenue", null, FormMethod.Post, new { enctype = "multipart/form-data" })) { <table class="grid" style="margin-top: 15px"> <thead> <tr> <th>FOP</th> <th>ORGN</th> <th>PROGRAM</th> <th>PERCENTAGE</th> <th></th> </tr> </thead> <tbody> @for (int i = 0; i < Model.editBillingFOPList.Count;i++ ) { <tr> <td>@Html.TextBox("FOPList[" + @i + "].Fund", Model.editBillingFOPList[i].Fund)</td> <td>@Html.TextBox("FOPList[" + @i + "].ORGN", Model.editBillingFOPList[i].ORGN)</td> <td>@Html.TextBox("FOPList[" + @i + "].Program", Model.editBillingFOPList[i].Program)</td> <td>@Html.TextBox("FOPList[" + @i + "].Percentage", Model.editBillingFOPList[i].Percentage)</td> </tr> 

this is the controller:

 [HttpPost] public ActionResult AddFOP(List<BillingFOPModel> FOPList) { return View(); } 

my FOPList shows the number 1, and if I expand it in debug mode, it displays a list of the model, but with zero values โ€‹โ€‹- any thoughts?

My model:

  public class BillingFOPModel { public string BillingArea; public string BillingAreaName; public string Fund; public string ORGN; public string Program; public string Percentage; } 

This is my ViewModel:

  public class EditBillingViewModel { //declare attributes public List<BillingFOPModel> editBillingFOPList { get; set; } public string newBillingArea { get; set; } public string newBillingAreaName { get; set; } public string newFund { get; set; } public string newORGN { get; set; } public string newProgram { get; set; } public string newPercentage { get; set; } public EditBillingViewModel() { } //constructor that passes a list and 2 strings public EditBillingViewModel(List<BillingFOPModel> editBillingFOPList, string newBillingArea, string newBillingAreaName) { this.editBillingFOPList = editBillingFOPList; this.newBillingArea = newBillingArea; this.newBillingAreaName = newBillingAreaName; } 
+7
c # model-view-controller asp.net-mvc
source share
2 answers

You are making the same mistake as most mvc developers, your model has fields, not properties, so you are not getting data.

Change the fields to properties in the model class:

 public class BillingFOPModel { public string BillingArea {get; set; } public string BillingAreaName { get; set;} public string Fund { get; set;} public string ORGN { get; set;} public string Program {get; set;} public string Percentage {get; set;} } 

Sidenote:

Always use strongly typed helpers such as TextBoxFor() , DropDownListFor() when possible.

+4
source share

Have a look at this: http://www.codeguru.com/csharp/.net/net_asp/mvc/using-display-templates-and-editor-templates-in-asp.net-mvc.htm

Using EditorTemplates means you donโ€™t need to have a for loop in your labeling, so you donโ€™t have to worry about setting the correct name and identifier on the controls.

+2
source share

All Articles