0

編集しようとしているテーブルにアイテムのリストがあります。

次のような BankAccount.cshtml ファイルがあります。

@model BankAccount

@Html.HiddenFor(x => x.AccountId, new { @id="accountId" } )

<table id="transactionTable">
    <tbody>
        @Html.EditorFor(x => x.InboundTransactions)
    </tbody>
</table>
<a id="addTransactionLink">Add</a>

<script type="text/javascript">
    $(document).ready(function () {

        $('#transferTable').on('click', 'a.removeLink', function (e) {
            $(this).closest('tr').remove();
        });

        $('#addTransactionLink').click(function () {

            var transaction = {
                TransactionNumber: "234"
            };

                $.post('/BankAccount/AddRow/', transaction, function (data) {

                $('#transactionTable').append(data);
            });
        });
    });
</script>

次のような Transaction.cshtml:

@model Transaction

    <tr>
        <td>
            @Html.EditorFor(x => x.TransactionNumber)
        </td>
        <td>
            <a class="removeLink">Remove</a>
        </td>
    </tr>

したがって、これは EditorFor InboundTransactions に入れられます。

BankAccountController のメソッド:

[HttpPost]
        public PartialViewResult AddRow(Transaction transaction)
        {
            return PartialView("EditorTemplates/Transaction", transaction);
        }

したがって、行の追加ボタンをクリックすると、新しい行が追加されるはずです。

とにかく、ページに移動して、すでに 2 つのトランザクションがある場合は、マークアップで次のように表示される行を追加します。

<tr>
  <td>
      <input id="BankAccount_Transactions_0__TransactionNumber" class="text-box single-line" type="text" value="456" name="BankAccount.Transactions[0].TransactionNumber" data-val-required="The TransactionNumber field is required." data-val-number="The field TransactionNumber must be a number." data-val="true">
  </td>
  <td>
      <a class="removeLink">Remove</a>
  </td>
</tr>

<tr>
  <td>
      <input id="BankAccount_Transactions_1__TransactionNumber" class="text-box single-line" type="text" value="456" name="BankAccount.Transactions[1].TransactionNumber" data-val-required="The TransactionNumber field is required." data-val-number="The field TransactionNumber must be a number." data-val="true">
  </td>
  <td>
      <a class="removeLink">Remove</a>
  </td>
</tr>

<tr>
  <td>
    <input id="Transactions" class="text-box single-line" type="text" value="0" name="Transactions">
  </td>
  <td>
     <a class="removeLink">Remove</a>
  </td>
</tr>

したがって、ここで明らかな問題を見ることができます。新しく追加された行には、BankAccount に属するトランザクションのコレクションの一部であるという情報が含まれていません。

ポストバックが発生すると、新しく追加された行は含まれません。

これを機能させる方法を知っている人はいますか?

4

1 に答える 1

0

可変長リストの編集については、次の記事を参照することをお勧めします。BeginCollectionItemこれは、コレクション内の番号付きインデックスをGuidに置き換えるカスタムヘルパーの使用法を示しています。これは、後でインデックスを再同期する必要があるため、アイテムの削除と追加を開始するときにも役立ちます。Guidsでは、そのような問題はありません。

于 2012-08-03T06:03:32.470 に答える