在对话框中打开局部视图,执行控制器操作然后关闭

时间:2012-06-27 01:16:25

标签: asp.net-mvc-3 jquery-ui

我有一个包含索引,编辑,创建和详细信息视图的案例模型。我有一个案例控制器。当用户处于案例的编辑视图中时,我希望他们能够单击一个按钮,打开带有局部视图的jQuery对话框,以便将案例中的投诉代码添加到案例中。这是局部视图:

@model IEnumerable<cummins_db.Models.ComplaintCode>

@{
    ViewBag.Title = "Case Complaint Codes";
}

<h2>Select a complaint code</h2>

<table>
    <tr>
        <th></th>
        <th>
            Complaint Code Name
        </th>
        <th>
            Complaint Type
        </th>
    </tr>

@try
    {
    foreach (var item in Model)
        {
    <tr>
        <td>
            @Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ComplaintCodeName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ComplaintType)
        </td>
    </tr>
        }
    }
catch
{
}

</table>

用户可以选择部分视图列表中显示的数据,并将其添加为已打开的编辑记录的多对多关系。 我在局部视图中使用此控制器方法来添加MTM记录。

public void SelectForCase(int id)
        {
        int cid;
        cid = casesid;

        if (ModelState.IsValid)
            {
            CaseComplaint c = new CaseComplaint
            {
                CasesID = cid,
                ComplaintCodeID = id
            };
            db.CaseComplaints.Add(c);
            db.SaveChanges();
            }
        }

问题是在此操作触发后,jQuery模式对话框和编辑视图关闭。 我只想关闭jQuery对话框并允许用户继续编辑案例记录。

部分视图正在执行它需要做的事情,但我需要保持编辑视图打开。

这是从编辑视图actionlink调用的jQuery,并在对话框中打开局部视图:

$(document).ready(function () {
    $('.addComplaintLink').button();

    $('#AddComplaintDialog').dialog(
    {
        autoOpen: false,
        width: 400,
        resizable: false,
        modal: true,
        buttons:
        {
            "Cancel": function () {
                $(this).dialog('close');
            }
        }
    });

    $('.addComplaintLink').click(function () {
        linkObj = $(this);
        var dialogDiv = $('#AddComplaintDialog');
        var viewUrl = linkObj.attr('href');
        $.get(viewUrl, function(data) {
            dialogDiv.html(data);
        //open dialog
        dialogDiv.dialog('open');
        });
        return false;
    });
});

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要在部分中使用AJAX

所以不要使用:

@Html.ActionLink("Select", "SelectForCase", new { id = item.ComplaintCodeID})

尝试:

@Ajax.ActionLink("linkText", "SelectForCase", new { id = item.ComplaintCodeID},
                   new AjaxOptions() {...})

[阅读更多:http://msdn.microsoft.com/en-us/library/dd493139]

或尝试使用jQuery.Ajax更新模型,而不是通过回发整个视图。