如何将列表从视图传递到控制器?
How do I pass a list from a view to a controller?
我有一个视图,我正在生成一个列表,但如果字段不为空,我无法将它成功传递给控制器:
我认为的代码:
@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>
这是控制器:
[HttpPost]
public ActionResult AddFOP(List<BillingFOPModel> FOPList)
{
return View();
}
我的 FOPList 显示计数为 1,如果我在调试模式下展开它,它会显示模型列表但具有空值 - 有什么想法吗?
我的模特:
public class BillingFOPModel
{
public string BillingArea;
public string BillingAreaName;
public string Fund;
public string ORGN;
public string Program;
public string Percentage;
}
这是我的 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;
}
您犯的错误与 mvc 的新开发人员大多犯的错误相同,您的模型具有字段而不是属性,这就是为什么您没有发布数据的原因。
将字段更改为模型中的属性 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;}
}
旁注:
尽可能使用 TextBoxFor()
、DropDownListFor()
等强类型助手。
使用 EditorTemplates 意味着您不需要在标记中使用 for 循环,因此不必太担心在控件上设置正确的名称和 ID。
我有一个视图,我正在生成一个列表,但如果字段不为空,我无法将它成功传递给控制器:
我认为的代码:
@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>
这是控制器:
[HttpPost]
public ActionResult AddFOP(List<BillingFOPModel> FOPList)
{
return View();
}
我的 FOPList 显示计数为 1,如果我在调试模式下展开它,它会显示模型列表但具有空值 - 有什么想法吗?
我的模特:
public class BillingFOPModel
{
public string BillingArea;
public string BillingAreaName;
public string Fund;
public string ORGN;
public string Program;
public string Percentage;
}
这是我的 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;
}
您犯的错误与 mvc 的新开发人员大多犯的错误相同,您的模型具有字段而不是属性,这就是为什么您没有发布数据的原因。
将字段更改为模型中的属性 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;}
}
旁注:
尽可能使用 TextBoxFor()
、DropDownListFor()
等强类型助手。
使用 EditorTemplates 意味着您不需要在标记中使用 for 循环,因此不必太担心在控件上设置正确的名称和 ID。