0

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":""}

4

2 に答える 2

0

パラメータが矛盾しています。

public ActionResult GetAsiguratiSuplimentari(int numarAsiguratiSuplimentari?, AcpComplexAsigurat[] oldData)

int? numarAsiguratiSuplimentarinull可能です?

また

    $.post('@Url.Action("GetAsiguratiSuplimentari")', {numarAsiguratiSuplimentari:number,AcpComplexAsigurat:list}, function (data) {

... ... {numarAsiguratiSuplimentari:number,AcpComplexAsigurat:list}...

文字列を解析してjsonを取得し、モデルに変換できます。

私のサンプル;

[HttpPost()]
public ActionResult GetAsiguratiSuplimentari(string model)
{
    List<myModel> myModel = JsonConvert.DeserializeObject<List<muModel>>(model);
}
于 2013-06-26T09:03:14.130 に答える
0

私は現在 MVC 3 を持っていませんが、これは MVC 4 (Fiddler を使用) で正常に動作しています。あなたが試すことができるいくつかのことがあります:

  • 呼び出しで明示的に設定さdataType: "json"れているため$.post、jQuery はそれを推測できない場合があります。
  • stringの代わりにを受け入れるようにメソッド シグネチャを変更しますint。MVC 3 のバインディングでは、自動的にそれを実行できない可能性があります。

これらのいずれかが機能する場合は、間違ったオプションを削除できるようにお知らせください。

于 2013-06-26T12:59:53.023 に答える