发送Ajax请求与按ID发送整个表单

时间:2015-10-22 18:07:04

标签: c# ajax asp.net-mvc forms

客户端应该能够通过按钮发送所有内容,因此我可以执行以下操作:

将所有内容发送为名为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可以看到一个加载栏,它会很棒,但是如果他关闭页面,请求就会不完整而且可能很复杂。

哪个选项可能更好,为什么以及使用另一个选项对安全性有何影响?

1 个答案:

答案 0 :(得分:1)

我认为解决方案主要取决于您希望的行为。

  

通过使用AJAX,cliend可以看到加载栏并且它会很棒,但如果他关闭页面请求将是不完整的并且可能很复杂

在2个解决方案中,如果用户在单击按钮后关闭页面,则不会取消保存。一旦请求发送,就无法取消。所以你不应该有&#34;安全&#34;无论选择何种解决方案都存在问题。

唯一需要注意的是在AJAX请求期间禁用所有AJAX按钮,以避免用户同时发送多个请求(这可能会导致保存不一致数据)。

经典的解决方案通常最容易实现。 AJAX解决方案实现起来最复杂(代码更多),但提供了最友好的行为。