使用参数打开jQuery对话框

时间:2013-02-20 13:50:12

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

我有一个MVC视图,我想从中弹出一个jQuery对话框。在对话框中,我想渲染一个视图,但控制器操作需要一个参数。这就是我所拥有的:

$(document).ready(function () {
            $dialog = $('<div></div>')
            .dialog({
            open: function(event, ui) {
                $(this).load("@Url.Action("Edit", "Agenda", new {id = ???})"); //Line to fix
            },
            autoOpen: false
        });

进一步说,我有这个代码调用对话框。请注意,我要传递给控制器​​操作的idcalEvent.id

$('#calendar').fullCalendar({
    eventClick: function (calEvent, jsEvent, view) {
        $dialog.dialog('open');
    }
});

所以问题是:如何调整我的代码以将calEvent传递给id参数?

3 个答案:

答案 0 :(得分:6)

jQuery提供了一种为您存储数据的方法,无需使用虚拟属性或查找问题的解决方法。

在jquery对话框对象上使用.data()方法在调用它时将所需的任何数据绑定到对话框,并在open()函数中使用相同的方法将其读出:

$('#calendar').fullCalendar({
eventClick: function (calEvent, jsEvent, view) {
    $dialog.data('id', calEvent.id).dialog('open');
}
});

$(document).ready(function () {
        $dialog = $('<div></div>')
        .dialog({
        open: function(event, ui) {
            url = "@Url.Action("Edit", "Agenda", new {id = "XXX"})";
            url.replace( "XXX", $(this).data('id') );
            $(this).load(url);
        },
        autoOpen: false
    });

答案 1 :(得分:2)

你的问题不是很清楚。如果要传递给控制器​​的参数是javascript变量,则可以使用以下命令:

open: function(event, ui) {
    var url = '@Url.Action("Edit", "Agenda")';
    $(this).load(url, { id: someJavascriptVariable });
}

查看.load()方法的文档。第二个参数允许您传递AJAX请求的其他参数。

答案 2 :(得分:0)

简单地说, 它应该工作

$(document).ready(function () {
        $dialog = $('<div></div>')
        .dialog({
        open: function(event, ui) {
            $(this).load("@Url.Action("Edit", "Agenda", new {id = '<%= calEvent.id %>'})"); //Line to fix
        },
        autoOpen: false
    });