【问题标题】:Trigger controller actions in MVC when jQueryUi dialog is opened or closed打开或关闭 jQueryUi 对话框时在 MVC 中触发控制器操作
【发布时间】:2015-07-04 11:06:08
【问题描述】:

我的模型看起来像:

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

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

类似:

<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 对话框时,我想触发一个帖子 -> StoreItem 的控制器动作。我该怎么做?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我没有完全测试这段代码,我在其他地方找到了解决方案,但它的主要思想是相同的。标记为答案以供将来参考。
    最近更新 更多