0

この質問は、次の質問の続きです。残念ながら、まだ解決されていないビューにJSONデータを追加します。

2つのコントロールとflexigridのプレースホルダーを備えたフォームがあるメインビューで、下部に次を追加しました

<div id="add-edit-dialog" style="display: none" title="Add / Edit Client"> 
    @Html.Partial("_ClientForm", Model)
</div>

flexigridプラグリンは実行時にインスタンス化され、追加、編集、削除の3つのボタンを追加します。[編集]ボタンの場合、サーバーから現在の行情報を取得して、フォームに表示する必要があります。[追加]ボタンの場合、サーバーに移動する必要はありません(私は思います)。

これは、[編集]ボタンの現在のコードです。

function edit(com, grid) {
    $('.trSelected', grid).each(function () {

        var id = $(this).attr('id');
        id = id.substring(id.lastIndexOf('row') + 3);
        currentId = id;
        $('#fntype').val('Edit');
        var ClientName;
        ClientName =$('.trSelected td:eq(2)').text();
        var url = '/Client/Edit/' + id ;

        $.getJSON(url, function (html) {
            // setFormControls(data.Id, data.Role, data.Location, data.JobType,
                // data.Description);
            // alert(data);
            $($dlg).html(html);
        });
        //location.replace(url);
        RunModalDialog("Edit Client: " + ClientName);
    });

したがって、コントローラーアクションを編集し、モデルとして渡された正しい情報を含む同じ部分ビュー_ClientFormを返します。FireBugで返された応答結果を見ると、返されたHTMLが正しく、すべてのテキストボックスの値に正しい情報が含まれていることがわかります。

ただし、開くダイアログは[追加]ボタンのダイアログとまったく同じように見えます。つまり、すべてのフォームコントロールが空白になります。何が悪いのか、なぜそれが思い通りに機能しないのか理解できません。

これは私がRunModalDialogのために持っているものです:

var validator = $("#add-edit-form").validate();

var $dlg = $("#add-edit-dialog").dialog({
    autoOpen: false,
    show: "blind",
    closeOnEscape: true,
    resizable: true,
    width: 1200,
    height: 750,
    minHeight: 600,
    minWidth: 950,
    buttons: {
        "Save": function () {

            if ($("#add-edit-form").valid()) {
                // jobPost.setVals(txtId.val(), txtRole.val(), 
                    // txtLocation.val(), txtJobType.val(), 
                    // txtDescription.val());

                $.ajax({
                    type: 'POST',
                    //data: JSON.stringify(clientInformation),
                    url: '/Client/Save',
                    dataType: 'json',
                    contentType: 'application/json',
                    success: function (result) {
                        // insert new list into grid
                        $('#flexClients').flexAddData(result);
                    }
                });
                $(this).dialog('close');
            } else return false;
        },
        Cancel: function () {
            $(this).dialog("close");
            clearForm();
            if (validator)
                validator.resetForm();
        }
    },
    close: function () {
        clearForm(); 
    },
    open: function () {
        //$("#add-edit-dialog").parent().appendTo($("#add-edit-form"));
    }
});

function RunModalDialog(title, url) {    
    if (title) {
        $dlg.dialog("option", {"title": title });
    }
    if (url) {        
        $dlg.load(url).dialog("option", { "title": title }).dialog("open");

        //$dlg.load(url, function () {
        //    var validator = $("#sform").validate();
        //    if (validator)
        //         validator.resetForm();
        //    $dlg.dialog("option", { "title": title }).dialog("open");
        //});
    } else {
        $dlg.dialog("open");
    }
}

ロードされたコード(およびコメント化されたコード)は、この問題を解決するためのもう1つの試みでした。そのようなものは機能しましたが(フォームは情報とともに表示されます)、メインのクライアントビューも再ロードされたため、二重グリッドが表示されていました。

これを機能させるには、コードで何を変更すればよいかわかりますか?

よろしくお願いします。

4

2 に答える 2

0

私はこれまでに持っているものをブログに投稿しました-それが役立つことを願っています

http://blogs.lessthandot.com/index.php/WebDev/UIDevelopment/AJAX/asp-net-mvc-project-with

于 2013-01-28T14:15:56.747 に答える
0

MSのJazzenChenの助けを借りて、この問題を解決しました。データを正しく表示するために必要なのは、getJSONをjquery関数を取得するように変更することだけでした。これで、フォームに正しく入力されたデータが付属します。次の課題は、データを保存することです。

于 2013-01-22T13:51:55.320 に答える