0

私はasp.netmvc4VB.NETをjquery1.8.3とjquery-ui1.9.2で使用しており、タイトルが示すように、コントローラーへのjqueryコールバックは空のモデルを提供します。関数は呼び出されますが、モデルのプロパティが設定されていません。シナリオは次のとおりです。いくつかのliが含まれている順序付けされていないリストがあります。liをクリックすると、liの非表示フィールドから値を取得します。この値は、私が渡そうとしているモデルです。コントローラーでのアクションでは、提供されたモデルで部分ビューを設定し、これを返します。次に、返された部分ビューでdivを上書きして、jqueryスクリプトを完成させます。

コードは次のとおりです。

リスト付きのHTMLdiv

<div class="listContainer">
            <ul>
                @For Each attachment As EPower.eSuite.Model.DTO.HRCore.Attachment In Model.Documents
                    @<li>
                        <input type="hidden" value="@attachment" class="test" />
                        <a href="#">
                            <span class="title">@attachment.Filename</span>
                            <span class="description">@attachment.Tag.ID</span>
                        </a>
                    </li>
                Next
            </ul>
        </div>

JQuery関数:

$('.listContainer ul li').on('click', function () {
            var jsonModel = $(this).children('input.test').val();
            $.ajax({
                type: "POST",
                url: '@Url.Action("SetPersonalDocumentPartial", "WhoIsWho")',
                data: JSON.stringify(jsonModel),
                dataType: 'json',
                contentType: 'application/json',
                error: function (t) {
                    $('.personalDocumentContent').html(t.responseText);
                },
                success: function (result) {
                    $('.personalDocumentContent').html(result);
                }
            });
        });

MVCコントローラーのアクション:

<HttpPost> _
        Public Function SetPersonalDocumentPartial(ByVal attachment As Model.DTO.HRCore.Attachment) As ActionResult
            Return PartialView("_ViewPersonalDocumentPartial", attachment)
        End Function

現在機能しているもの:関数はMVCアクションを正常に呼び出しますが、モデルのプロパティが設定されていません。コントローラのモデルを設定値に設定すると、部分が返され、divが正常に上書きされます。どういうわけか、それはエラーになります。

私たちは一緒にそれを解決できることを願っています!

4

1 に答える 1

2

この.val()メソッドは文字列を返します。そして、あなたJSON.stringifyが文字列であなたが何を得るかを推測するとき?ええ、あなたはそれを正しく推測しました:文字列。たとえば、次のようになりJSON.stringify('foobar')ます'foobar'。また、コントローラーにアクチンを送信foobarしても、モデルバインダーはまったく役に立ちません。

モデルバインダーがリクエストからモデルをバインドできるようにする場合は、リクエストにバインドするこのモデルのすべてのプロパティが含まれていることを確認してください。

data: JSON.stringify({ filename: $(this).children('input.test').val() })

これにより、のFileNameプロパティが設定されますModel.DTO.HRCore.Attachment。他のプロパティがある場合は、それらも含めるようにしてください。

data: JSON.stringify({ 
    filename: $(this).children('input.test').val(),
    someOtherProperty: 'some other value'
})
于 2013-01-22T10:55:30.570 に答える