2

ダイアログ ボックスを使用する作成機能の部分ビューがあり、インデックス ページ内の特定のボタンをクリックするとポップアップが表示されます (インデックス ページと作成ページのコントローラーは異なります)。インデックスから create にパラメーターを渡してボタンをクリックしてダイアログ ボックスを表示しようとすると、部分ビューが表示されません。しかし、パラメーターを削除すると、インデックス ページからパラメーターが必要なため、そのパラメーターのポスト アクションは機能しませんが、ダイアログ ボックスには部分的なビューが表示されます。

以下は、パラメーターを渡すインデックスの行と、ダイアログ ボックスを表示するために使用されるボタンです。

<input type="button" class="btnPartial" />
                    <div id="@item.RoomCode" style ="visibility:hidden;">@Url.Action("CallPartial", "RoomReservation", new { roomId = item.Id })</div>                  
                </div>

以下は、インデックス ページからパラメーターを受け取り、部分ビューを表示するコントローラーです。

 public ActionResult CallPartial(int roomId) {
            var model = _db.Rooms.Single(r => r.Id == roomId);
            ViewBag.roomCode = model.RoomCode;
            return PartialView("_Create", model.Customers );
        }

部分的なビューは次のとおりです。

@model ROOMRESERVATION.CORE.Model.RoomReservation

@{
    ViewBag.Title = "Create";
}
<h3>@ViewBag.roomCode</h3>
@Html.DisplayFor(model => model.Rooms.RoomName)
<h2>Create</h2>
@using (Html.BeginForm("Create", "RoomReservation", new {roomid = model.Rooms.Id}))
{
    @Html.ValidationSummary(true)
<fieldset>
     <legend>RoomReservation</legend>
@Html.Partial("_CreateEdit", Model)
<div class="editor-label">
    @Html.LabelFor(model => model.Remarks)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Remarks)
    @Html.ValidationMessageFor(model => model.Remarks)
</div>
<p>
    <input id="btnReserve" type="submit" value="Create" />
</p>
</fieldset>
}

最後に、JS:

$('.btnPartial').click(function () {

        var url = $(this).parent("div").children("div").text();

        $('#dialog').load(url,
                function (response, status, xhr) {
                    $('#dialog').dialog('open');
                });

        $("body").toggleClass("dialogIsOpen");

        $("#dialogContainer").css("visibility", "visible");
    });

他のコントローラーとビューがそれに応答するため、モデルはすべて問題ありません。作成にビューをまだ使用していたとき、パラメーターは機能し、プログラムはスムーズに実行されるため、問題は部分図とダイアログ ボックス。どんな助けでも感謝します、ありがとう:)

編集

ビューデータを使用して部分ビューに渡そうとしましたが、うまくいきましたが、そうする方法がもっとある場合は、何か方法を投稿してください:)。

4

2 に答える 2

1

この方法を試してください:

 $('.btnPartial').click(function () {
    $(this).preventDefault();
    var url = $(this).parent("div").children("div").text();
    var dialogWindow = $('#dialog');
    var opt = {
        autoOpen: false,
        resizable: false,
        width: 'auto',
        height: 'auto'
    }

    $.get(url, function (data) {
        //
        // Loads the data into the div
        //
        $(dialogWindow).html(data);
    }).done(function () {
        //
        // Show the Dialog when all data comes from the server
        //
        $(dialogWindow).dialog(opt).dialog('open');
    });

    $("body").toggleClass("dialogIsOpen");

    $("#dialogContainer").css("visibility", "visible");
});

これがお役に立てば幸いです。

于 2013-05-17T01:52:20.520 に答える
0

AJAX呼び出しのためにダイアログが表示されなかったためだと思います。それでは、AJAX 呼び出しを使用して、div などの 1 つの HTML 要素にパーシャルを配置し、終了後にその要素をダイアログに追加できると思いませんか。

于 2013-05-17T03:24:38.537 に答える