将字符串绑定到控制器中的列表

时间:2014-04-17 12:57:27

标签: c# string list asp.net-mvc-4 binding

我在View中有一个表单,其中有多个字段。我将它们发送到控制器,我想将它们绑定到List。我怎样才能做到这一点?

现在我有了这段代码

查看

using (Html.BeginForm("GetVendorInvoice", "Sale", FormMethod.Get))
{
    foreach (var invoice in Model.VendorInvoices)
    { 
        @Html.Hidden("invoiceId", invoice.InvoiceId)
    }
    <input type="submit" value="Wszystkie na raz"/>
}

控制器:

public ActionResult GetVendorInvoice(List<string> invoiceIdList) {
...}

我读了一些文章说它应该工作但实际上并没有。 任何sugestions?

3 个答案:

答案 0 :(得分:2)

您有属性名称 InvoiceId ,而在行动中,您的参数是 invoiceIdList ,这是错误的,列表在操作中将为空,请执行以下操作:

public ActionResult GetVendorInvoice(List<string> InvoiceId) {
    ...}

或者你可以这样做:

foreach (var invoice in Model.VendorInvoices)
    { 
        @Html.Hidden("InvoiceId", invoice.InvoiceId)
    }

动作:

public ActionResult GetVendorInvoice(List<string> invoiceId) {
...}

答案 1 :(得分:0)

操作:

public virtual ActionResult Index()
{
    return View(new HomepageModel()
    {
            Strings = new[] {"one", "two", "three"}
    });
}

[HttpPost]
public ActionResult Index(List<string> strings)
{
    throw new Exception(String.Join(", ", strings));
}

查看:

@using (Html.BeginForm())
{

    for (int i = 0; i < Model.Strings.Length; ++i)
     {
         @Html.HiddenFor(model => model.Strings[i])
     }

    <input type="submit" value="submit" />
}

您应该使用HiddenFor辅助方法而不是隐藏方法,因为这是强类型的,并且会确保您的视图与模型匹配。使用索引器将为隐藏字段生成正确的名称。

答案 2 :(得分:0)

我找到了答案。首先是一个错误。视图中的归档名称与控制器中的参数名称不同。当我修复这个时,我有一串用逗号分隔的隐藏字段值。现在我必须拆分这个字符串,而且现在正常。 谢谢你的努力。