传递参数时,部分视图不会显示

时间:2013-05-17 00:52:21

标签: c# javascript jquery asp.net-mvc asp.net-mvc-4

我有一个创建函数的局部视图,它使用一个对话框,每当我点击索引页面中的特定按钮时弹出(索引和创建页面的控制器不同)。每当我尝试将索引中的参数传递给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");
    });

它的模型都可以,因为其他控制器和视图都会响应它,当我还在使用视图进行创建时,参数就可以运行了,程序运行顺畅,所以我预感到问题出在部分视图和对话框的用法。任何帮助将不胜感激,谢谢:)

修改

我尝试使用viewdata传递给局部视图并且它有效,但是如果有更多方法这样做似乎很奇怪,请发布任何方法:)。

2 个答案:

答案 0 :(得分: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");
});

希望这能帮到你!

答案 1 :(得分:0)

我只是觉得因为AJAX调用你的对话框无法显示。那么为什么你不认为我们可以使用AJAX调用并将部分放在一个像div这样的HTML元素上,完成之后我们会将该元素附加到对话框中。