当打开或关闭jQueryUi对话框时,在MVC中触发控制器操作

Trigger controller actions in MVC when jQueryUi dialog is opened or closed

本文关键字:MVC 操作 控制器 对话框 jQueryUi      更新时间:2023-09-26

我的模型看起来像:

class Store
{
    ...
    virtual ICollection<StoreItem> items;
    ...
}

商店视图显示商店属性以及包含项目和StoreItem属性的表。我希望当点击一个Item,并显示一个jQuery UI对话框来编辑Item模型时。为此,我为StoreItem创建了Views操作,并在对话框中嵌入了一个部分框架。

类似于:

<div id="modaldlg" title="Edit item?">
    @using (Ajax.BeginForm(
    new AjaxOptions
    {
        HttpMethod = "get",
        InsertionMode = InsertionMode.Replace,
    }))
    {
        @Html.Action("Edit", "StoreItem")
    }
</div>

我的问题:

  1. 加载父页面时会触发StoreItem控制器操作。我希望它在显示对话框时触发,因为它取决于单击的项目
  2. 当我关闭jQuery对话框时,我想触发一个post->StoreItem的控制器操作。我该怎么做

虽然我对解决方案的描述非常准确,因为我不确定父视图的结构,但我正在我的一个项目中做类似的事情。我是这样做的:

$('.itemContainer').on('click', '#buttonId', function (event) {
        event.preventDefault();
        $("#PlaceholderDiv").dialog({
            autoOpen: true,
            width: 450,
            height: 450,
            resizable: false,
            title: 'Edit Item',
            modal: true,
            open: function () { //Use the open handler to load data into the dialog.
                $('#loadingAnimation').show();
                $(this).load('/Controller/Action/' + itemId, function(){$('#loadingAnimation').hide();});
            },
            close: function () {
                $.ajax({
                     type: "POST", 
                     url: $('#formId').attr('action'), 
                     data: $('#formId').serialize()})
                .done(setTimeout(function() {RefreshPartial()}, (delayInms)));
            },
            buttons: {
                Close: function () {
                    $(this).dialog("close");
                }
            }
        });
        return false;
    });