MVC3 コントローラーから次のアクションを使用します。
[HttpPost]
public ActionResult GetAsiguratiSuplimentari(int numarAsiguratiSuplimentari, AcpComplexAsigurat[] oldData)
{
var newData = new List<AcpComplexAsigurat>(oldData);
for(int i = newData.Count; i < numarAsiguratiSuplimentari; i++)
{
newData.Add(new AcpComplexAsigurat());
}
return PartialView("AsiguratiSuplimentari", newData);
}
そしてjs:
$("#NumarAsiguratiSuplimentari").change(function (e) {
var data = { oldData: $("#div-asigurati-suplimentari").find('input').serialize(), numarAsiguratiSuplimentari: $("#NumarAsiguratiSuplimentari").val() };
var postData = JSON.stringify(data);
$.post('@Url.Action("GetAsiguratiSuplimentari")', postData, function (data) {
$("#div-asigurati-suplimentari").html(data);
});
});
ユーザーが選択した選択オプションを取得し、入力のテーブルをシリアル化して上記のアクションに送信したいと考えています。
<h3>Asigurati</h3>
<div class="field half odd">
<label>Numar asigurati suplimentari</label>
<select id="NumarAsiguratiSuplimentari" name="NumarAsiguratiSuplimentari">
@for (int i = 0; i <= 30; i++)
{
<option value="@i" @(Model.Asigurati.Count == i ? "selected" : "")>@i</option>
}
</select>
</div>
<div class="field full" id="div-asigurati-suplimentari">
@if (Model.Asigurati.Count > 0)
{
<table id="Asigurati">
<thead>
<tr>
<th>CNP</th>
<th>Nume</th>
<th>Prenume</th>
<th>Data nasterii</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Asigurati)
{
<tr>
<td style="padding: 3px;">@Html.TextBoxFor(x => Model.Asigurati[Model.Asigurati.IndexOf(item)].Cnp, new { maxlength = 13 })</td>
<td style="padding: 3px;">@Html.TextBoxFor(x => Model.Asigurati[Model.Asigurati.IndexOf(item)].Nume)</td>
<td style="padding: 3px;">@Html.TextBoxFor(x => Model.Asigurati[Model.Asigurati.IndexOf(item)].Prenume)</td>
<td style="padding: 3px;">@Html.TextBoxFor(x => Model.Asigurati[Model.Asigurati.IndexOf(item)].DataNastere)</td>
</tr>
}
</tbody>
</table>
}
</div>
モノレールでは、入力パラメーターを {JsonBinder] 属性で装飾する必要がありましたが、MVC3 ではどのように処理すればよいかわかりません。
基本的に次のエラーが表示されます。
パラメータ ディクショナリに、「BrokerPlatform」のメソッド「System.Web.Mvc.ActionResult GetAsiguratiSuplimentari(Int32, BrokerPlatform.Services.AcpComplex.AcpComplexAsigurat[])」の null 非許容型「System.Int32」のパラメータ「numarAsiguratiSuplimentari」の null エントリが含まれています。 .Areas.AcpComplex.Controllers.CarpaticaController'. オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ
送信する JSON は次のとおりです。
{"numarAsiguratiSuplimentari":"2","oldData":""}