客户端应该能够通过按钮发送所有内容,因此我可以执行以下操作:
将所有内容发送为名为invoiceId_detail_text
的表单字段,其中invoiceId
将是发票的ID,详细信息部分,并标记字段类型。
示例:
<form id="invoices" name="invoice">
@foreach(var Invoce in Model.Invoices) {
<div>
<input type="number" id="@String.Format("{0}_amount", Invoice.InvoiceId)"/>
</div>
/*More Input Fields for the Invoice*/
<div>
<button type="submit"></button>
</div>
}
</form>
或者我可以将每张发票以自己的形式分开,并通过ajax发送,每次成功我发送下一张等等。
示例:
@foreach(var Invoice in Model.Invoices) {
string formName = String.Format("{0}_form", Invoce.InvoceId);
<form id="@formName" class="invoiceForm" id="@formName" action="@Url.Action("EditIndividualInvoice","InvoicingEdit")">
<input type="hidden" name="InvoiceId" value="@Invoice.InvoiceId"/>
<div>
<input type="number"/>
</div>
/*More Input Fields for the Invoice*/
</form>
}
<button type="button" onclick="SendAllForms();">Send</button>
我在一些同事之间进行了一些研究,其中很多人告诉我只要同时发一张包含所有发票的帖子,然后按项目ID访问每个字段,因为我没有知道将要发送多少发票,但我可以通过JQuery上课获得所有发票,因此它不应该是一个问题。
我还从用户体验的角度阅读了this文章,它让我一直在思考它。
通过使用AJAX,cliend可以看到一个加载栏,它会很棒,但是如果他关闭页面,请求就会不完整而且可能很复杂。
哪个选项可能更好,为什么以及使用另一个选项对安全性有何影响?
答案 0 :(得分:1)
我认为解决方案主要取决于您希望的行为。
通过使用AJAX,cliend可以看到加载栏并且它会很棒,但如果他关闭页面请求将是不完整的并且可能很复杂。
在2个解决方案中,如果用户在单击按钮后关闭页面,则不会取消保存。一旦请求发送,就无法取消。所以你不应该有&#34;安全&#34;无论选择何种解决方案都存在问题。
唯一需要注意的是在AJAX请求期间禁用所有AJAX按钮,以避免用户同时发送多个请求(这可能会导致保存不一致数据)。
经典的解决方案通常最容易实现。 AJAX解决方案实现起来最复杂(代码更多),但提供了最友好的行为。