2

コントローラーでアクションを要求し、更新された情報を含むモデルを受け取るアプリケーションを実行しようとしています。手順は簡単で、

  1. フォームにいくつかの情報を入力します。
  2. ボタンをクリックして、コントローラーのアクションを呼び出します。
  3. このアクションは、受け取ったモデルを更新し、PartialView メソッドを使用して送り返します。

しかし、モデルは更新されません!

コード:

    <div id="div-dialog"> // THIS IS A DIALOG JQUERYUI
        <div id="div_toolbar" class="ui-widget-header ui-corner-all"> //THIS IS A TOOLBAR JQUERYUI
            <div style="margin-right: auto; margin-left: auto; width: 420px">
                <button id="btn_novo">Novo</button>
                <button id="btn_gravar">Gravar</button>
                <button id="btn_limpar">Limpar</button>
                <button id="btn_excluir">Excluir</button>
            </div>  
        </div>
    </div>
    <div id="partial-render"> //HERE GOES THE PARTIAL VIEW
        @Html.Partial("AvaliationPeriodPartial")
    </div>    

<script type="text/javascript">
    $(function () {
        $('#div-dialog').dialog({
            height: 'auto',
            width: 600
        });

        $('#btn_novo').button({ icons: { primary: "ui-icon-document"} }).button('enable').click(function () {

            /* ON THIS FUNCTION I SERIALIZE THE INPUTS TO SEND IT TO THE ACTION ON CONTROLLER
               TO UPDATE THE INFORMATION */

            var formData = $('input').serialize();

            $('input[disabled]').each(function () {
                formData = formData + '&' + $(this).attr('name') + '=' + $(this).val();
            });

            //HERE THE AJAX CALL
            $.post('@Url.Action("teste", "Import")', formData, function (html) {
                $('#partial-render').html(html);
            }, 'html');
    });
</script>

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

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Bem-vindo | @ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/themes/redmond/jquery-ui-1.9.1.custom.min.css")" rel="stylesheet" type="text/css" />    
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.8.3.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.9.2.custom.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/MicrosoftAjax.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
</head>

<body>
    @RenderBody()
</body>
</html>

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

@model GdaeMVC4.Models.ScreenModels.AvaliationPeriod
@Html.LabelFor(m => m.IdAvaliation)
@Html.TextBoxFor(m => m.IdAvaliation)
@Html.TextBoxFor(m => m.Description)
4

1 に答える 1

1

JavaScript コードを (firebug などで) 中断し、フォームデータが実際に期待どおりに送信されることを確認します。

formData が正しいと思われる場合は、コントローラー アクションにブレークを挿入し、モデルビルダーが formdata をモデルに正しく変換したことを確認します。

おまけのトリビア: デフォルトのモデルビルダーは、ブール値の "1" を "true" に変換しません。おそらくそれが問題ですか?

于 2012-11-30T17:56:46.247 に答える