ASP.Net MVC隐藏字段数组

时间:2011-02-19 00:41:17

标签: asp.net-mvc

我正在发送一个List<>到视图,然后将该列表转换为隐藏字段数组。这是使用局部视图完成的,以构建表。

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<BudgieMoneySite.Models.TransactionSplitLine>" %>
<tr>
    <td>
        <%=Model.Category %>
        <%=Html.HiddenFor(x => x.CategoryId)%>
    </td>
    <td>
        <%=Model.SubCategory %>
        <%=Html.HiddenFor(x => x.SubCategoryId)%>
    </td>
    <td>
        <%=Model.Amount %>
        <%=Html.HiddenFor(x => x.AmountValue)%>
    </td>

</tr>

我有x行....所以我希望我可以将隐藏字段中的值作为数组获取。我的模型中有一个字段,定义为public string [] CategoryIds {get;组; }

(我认为问题可能是隐藏的字段被称为'CategoryId'而mu模型需要'CategoryIds')。

渲染时,我看到我有一行看起来像这样:

<tr>
<td>
    Medical
    <input id="TransactionSplitLines_2__CategoryId" name="TransactionSplitLines[2].CategoryId" type="hidden" value="6" />

</td>
<td>
    Over the Counter Medicines
    <input id="TransactionSplitLines_2__SubCategoryId" name="TransactionSplitLines[2].SubCategoryId" type="hidden" value="22" />
</td>
<td>
    111
    <input id="TransactionSplitLines_2__AmountValue" name="TransactionSplitLines[2].AmountValue" type="hidden" value="0" />
</td>

然后我尝试将数据恢复到控制器中,如下所示:

[HttpPost]
public ActionResult AccountTransaction(AccountTransactionView model)
{
    var reply = CreateModel(model);
    if (model.CategoryIds != null)
    {
        for (int i = 0; i < model.CategoryIds.Count(); i++ )
        {
            reply.TransactionSplitLines.Add(new TransactionSplitLine
                                                {
                                                    Amount = "100", 
                                                    Category = Services.CategoryServices.GetCategoryById(int.Parse(model.CategoryIds[i])).Description, 
                                                    SubCategoryId = model.SelectedCategoryId, 
                                                    SubCategory = Services.SubCategoryServices.GetSubCategoryById(model.SelectedSubCategoryId).Description
                                                });
        }
    }
    reply.TransactionSplitLines.Add(new TransactionSplitLine
                                        {
                                            Amount = model.Amount, 
                                            Category = Services.CategoryServices.GetCategoryById(model.SelectedCategoryId).Description, 
                                            SubCategory = Services.SubCategoryServices.GetSubCategoryById(model.SelectedSubCategoryId).Description, 
                                            CategoryId = model.SelectedCategoryId,
                                            SubCategoryId = model.SelectedSubCategoryId
                                        });
    return View("AccountTransaction", reply);
}

但是CategoryIds总是为空......

当我们的名字是'TransactionSplitLines [2] .SubCategoryId'时,我如何引用隐藏字段(我认为这是第二行)。我想我有一个命名问题,而且我只是纠缠不清......但希望你能帮忙吗?

编辑:这是AccountTransactionView类..

 public class AccountTransactionView
{
  public AccountTransactionView()
  {
      TransactionSplitLines = new List<TransactionSplitLine>();
  }

    [DisplayName("Bank Account")]
    public IEnumerable<SelectListItem> Accounts { get; set; }

    [DisplayName("Cost Center")]
    public IEnumerable<SelectListItem> CostCenters { get; set; }

    [DisplayName("Payee")]
    public IEnumerable<SelectListItem> Payees { get; set; }

    [DisplayName("Transaction Type")]
    public List<TransactionTypeView> TransactionTypes { get; set; }

    public int SelectedAccountId { get; set; }
    public int SelectedCostCenterId { get; set; }
    public int SelectedPayeeId { get; set; }
    [DisplayName("Category")]
    public int SelectedCategoryId { get; set; }
    [DisplayName("Sub Category")]
    public int SelectedSubCategoryId { get; set; }
    public int SelectedTransactionTypeId { get; set; }
    [DisplayName("Budget")]
    public int SelectedBudgetId { get; set; }

    [DisplayName("Transaction Date")]
    public DateTime TransactionDate { get; set; }
    [DisplayName("Transaction Date")]
    public string FormattedDateTime
    {
        get
        {
            return TransactionDate.ToString("dd/MM/yyyy");

        }
    }
    public int TransactionId { get; set; }
    public bool Deleted { get; set; }
    public List<TransactionSplitLine> TransactionSplitLines { get; set; }
    public string Amount { get; set; }

}

2 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

您需要遍历集合以将其发布回控制器:

@if (Model.Items != null)
{
    for (int i = 0; i < Model.Items.Length; i++)
    {
        @Html.HiddenFor(x => x.Items[i])
    }
}