gpt4 book ai didi

c# - 如何将列表从 View 传递到 MVC Controller

转载 作者:太空宇宙 更新时间:2023-11-03 12:56:52 24 4
gpt4 key购买 nike

我在 MVC 中有一个搜索功能来获取匹配的交易。加载事务后,将用结果填充一个表。我想将此结果发布到 Controller 以将交易导出到 Excel 文件。问题是当我将我的 View 模型发布到我的 Controller 时,整个 View 模型都是空的。我到处搜索了很多,得到了很多不同的结果,但我无法让它发挥作用。这是我的代码:

已更新

查看模型:

    public class TransactionsViewModel : ViewModelBase
{
public TransactionsViewModel()
{
Charges = new List<Transaction>();
Invoices = new List<Invoices>();
}

public List<Transaction> Charges { get; set; }
public List<Invoices> Invoices { get; set; }

[DisplayName("Telefonnummer")]
public string PhoneNumber { get; set; }
[DisplayName("Personnummer")]
public string PersonalIdentityNumber { get; set; }

[DisplayName("Ordernummer")]
public string OrderNumber { get; set; }

[DisplayName("Orderbeskrivning")]
public string OrderDescription { get; set; }

// A lot of other input format controls

public class Transaction
{
public string Status { get; set; }
public DateTime Date { get; set; }
public string Msisdn { get; set; }
public string OrderNo { get; set; }
public string NetsId { get; set; }
public string Reference { get; set; }
public string Message { get; set; }
public decimal Amount { get; set; }
public decimal Vat { get; set; }
public string Merchant { get; set; }
public decimal Fee { get; set; }
public string PaymentType { get; set; }
public string OrderNumber { get; set; }
public string OrderDescription { get; set; }
}
}

查看

    <div id="transactionsdiv">
@using (Html.BeginForm("SearchTransactions", "Transactions", FormMethod.Get, new { @class = "merchant-form" }))
{
<div class="left-col">
<div class="form-group">
@Html.LabelFor(model => model.PhoneNumber)
@Html.EditorFor(model => model.PhoneNumber, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.PhoneNumber, "", new { @class = "text-danger" })
</div>

</div>
<div class="form-button">
<input type="submit" value="Sök" class="btn btn-primary" />
</div>
}


<div>
@Html.Partial("ExportFiles")
</div>

导出文件

<div id="">
@using (Html.BeginForm("ExportTransactions", "Transactions", FormMethod.Post, new { @class = "merchant-form" }))
{
<input type="submit" value="Exportera" class="btn btn-primary" />
if (Model.Charges != null)
{
for (int i = 0; i < Model.Charges.Count; i++)
{
<input type="hidden" name="command.Transaction[i].Date" value="@(Model.Charges[i].Date)" />
<input type="hidden" name="command.Transaction[i].Status" value="@(Model.Charges[i].Status)" />
<input type="hidden" name="command.Transaction[i].Msisdn" value="@(Model.Charges[i].Msisdn)" />
<input type="hidden" name="command.Transaction[i].OrderNo" value="@(Model.Charges[i].OrderNo)"/>
<input type="hidden" name="command.Transaction[i].NetsId" value="@(Model.Charges[i].NetsId)"/>
<input type="hidden" name="command.Transaction[i].Message" value="@(Model.Charges[i].Message)"/>
<input type="hidden" name="command.Transaction[i].Amount" value="@(Model.Charges[i].Amount)"/>
<input type="hidden" name="command.Transaction[i].Reference" value="@(Model.Charges[i].Reference)" />

}
}
}
<table id="Transaction" class="table table-striped table-bordered" width="100%" cellspacing="0" style="display: none;">
<thead>
<tr>
<th>Datum</th>
<th>Status</th>
<th class="amount-col">Msisdn</th>
<th>OrderNo</th>
<th>Netsreferens</th>
<th>Beskrivning</th>
<th class="amount-col">Belopp</th>
@if (Model.AllowRefund)
{
<th>Återköp</th>
}
</tr>
</thead>
<tbody>
@if (Model.Charges != null)
{
for (int i = 0; i < Model.Charges.Count; i++)
{
<tr>
<td class="text-col">@Model.Charges[i].Date</td>
<td>@Model.Charges[i].Status</td>
<td class="amount-col">@Model.Charges[i].Msisdn</td>
<td>@Model.Charges[i].OrderNo</td>
<td>@Model.Charges[i].NetsId</td>
<td>@Model.Charges[i].Message</td>
<td class="amount-col">@Model.Charges[i].Amount</td>
@if (Model.AllowRefund)
{
<td>
@if (Model.Charges[i].Status == "Completed")
{
<a href="/Merchants/Refund?chargeId=@(Model.Charges[i].Reference)"><button type="button" class="m-button m-button-main">Återköp< /button></a>
}
else
{
<div>&nbsp;</div>
}
</td>
}
</tr>
}

}
}

</tbody>
</table>

Controller

public ActionResult ExportTransactions(TransactionsViewModel command)
{
return View();
}

在这个例子中没有显示,但我正在使用事务表的局部 View ,周围有一个 mvc 表单标记,以将该值发布到 Controller 。我尝试使用 for 循环而不是 for each 循环,并尝试插入 Html.editorFor(model => model.Charges) 来获取列表。但是每次我将模型发布到 Controller 时,模型都是空的。有什么建议吗?

最佳答案

当您提交表单时,它将使用表单内输入控件的值填充请求表单数据。在您的表单中没有输入控件,因此不会发送任何内容。

向服务器发送你刚从服务器获得的完整数据列表对我来说似乎是一个很大的开销。我只会发回搜索参数,服务器可以再次执行搜索并返回您需要构建的 Excel。或者,如果您的搜索速度太慢而无法再次执行,则在数据库中查找费用(或发票)的 ID 列表就足够了。

无论如何,您需要发送回服务器的内容(作为表单参数)必须在表单中。最简单的方法是为每个需要发回的字段添加一个隐藏的输入。在这种情况下,您要发送一个对象数组,因此您必须 create proper names的输入。

像这样的东西应该可以解决问题:

导出文件

<div id="">
@using (Html.BeginForm("ExportTransactions", "Transactions", FormMethod.Post, new {@class = "merchant-form"}))
{
<input type="submit" value="Exportera" class="btn btn-primary"/>
@if (Model.Charges != null)
{
for (int i = 0; i < Model.Charges.Count; i++)
{
<input type="hidden" name="command.Charges[@(i)].Date" value="@Model.Charges[i].Date" />
<input type="hidden" name="command.Charges[@(i)].Status" value="@Model.Charges[i].Status" />
<input type="hidden" name="command.Charges[@(i)].Msisdn" value="@Model.Charges[i].Msisdn" />
<input type="hidden" name="command.Charges[@(i)].OrderNo" value="@Model.Charges[i].OrderNo" />

@* All the other properties of your objects that you need to send to the server on post. You get the idea... *@
}
}
}
<table id="Transaction" class="table table-striped table-bordered" width="100%" cellspacing="0" style="display: none;">
<thead>
<tr>
<th>Datum</th>
<th>Status</th>
<th class="amount-col">Msisdn</th>
<th>OrderNo</th>
<th>Netsreferens</th>
<th>Beskrivning</th>
<th class="amount-col">Belopp</th>
@if (Model.AllowRefund)
{
<th>Återköp</th>
}
</tr>
</thead>
<tbody>
@if (Model.Charges != null)
{
for (int i = 0; i < Model.Charges.Count; i++)
{
<tr>
<td class="text-col">@Model.Charges[i].Date</td>
<td>@Model.Charges[i].Status</td>
<td class="amount-col">@Model.Charges[i].Msisdn</td>
<td>@Model.Charges[i].OrderNo</td>
<td>@Model.Charges[i].NetsId</td>
<td>@Model.Charges[i].Message</td>
<td class="amount-col">@Model.Charges[i].Amount</td>
@if (Model.AllowRefund)
{
<td>
@if (Model.Charges[i].Status == "Completed")
{
<a href="/Merchants/Refund?chargeId=@(Model.Charges[i].Reference)"><button type="button" class="m-button m-button-main">Återköp< /button></a>
}
else
{
<div>&nbsp;</div>
}
</td>
}
</tr>
}

}
}

</tbody>
</table>

显示数据的表格与将发布到服务器的表格无关,因此在它之外完全没问题。

请记住,隐藏的输入只是对用户隐藏的输入,但它们不是只读的,因此任何具有足够知识的用户都可以在发送到服务器之前更改它们,并且您将生成包含不正确数据的 excel。因此,我强烈建议在创建 Excel 之前使用原始参数再次执行搜索。

关于c# - 如何将列表从 View 传递到 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33586136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com