局部视图在传递参数时不显示

本文关键字:显示 参数 视图 局部 | 更新日期: 2023-09-27 18:13:55

我有一个创建函数的部分视图,它使用一个对话框,每当我单击索引页内的特定按钮时就会弹出(索引和创建页的控制器不同)。每当我尝试将参数从索引传递给create并单击按钮以显示对话框时,它都不会显示部分视图。但是当我删除参数时,对话框显示了部分视图,尽管post操作将不起作用,因为我需要索引页的参数。

下面是索引中传递参数和用来显示对话框的按钮的行:

<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");
    });

它的模型都是OK的,因为其他控制器和视图响应它,当我仍然使用视图创建时,参数的东西工作,程序运行顺利,所以我有一种预感,问题是在部分视图和对话框的使用范围内。任何帮助都将不胜感激,谢谢:)

编辑

我尝试使用的viewdata传递到部分视图,它的工作,但这似乎是一个奇怪的事情这样做,如果有更多的方法这样做,请张贴任何方法:)。

局部视图在传递参数时不显示

试试:

<我>

 $('.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");
});

希望这对你有帮助!

我只是认为,因为AJAX调用,您的对话框无法显示。那么,您为什么不认为我们可以使用AJAX调用并将部分放在一个HTML元素(如div)上,然后在完成后将该元素附加到对话框中呢?