【问题标题】:How to call c# method with parameter from Jquery? ASP.Net 2.0如何使用来自 Jquery 的参数调用 c# 方法? ASP.Net 2.0
【发布时间】:2011-07-13 09:52:51
【问题描述】:

我在 default.aspx 页面中显示模态弹出窗口:

<a id="popup" href="../Popup/Keywords.aspx">edit</a>

jquery函数:

$(document).ready(function () {
            $('a#popup').live('click', function (e) {

                var page = $(this).attr("href")

                var $dialog = $('<div></div>')
                .html('<iframe style="border: 0px; " src="' + page + '" width="100%" height="100%"></iframe>')
                .dialog({
                    autoOpen: false,
                    modal: true,
                    height: 450,
                    width: 'auto',
                    title: "Edit Employee",
                    buttons: {
                        "Close": function () { $dialog.dialog('close'); }
                                },
                    close: function (event, ui) {


                    __doPostBack('<%= grdReportKeywordsRefresh(report_id) %>', '');
                    }
                });
                $dialog.dialog('open');
                e.preventDefault();
            });
        });

如何调用带有参数“report_id”的“grdReportKeywordsRefresh”方法对吗?

为什么Default.aspx页面的控件不显示在弹窗中?

report_id:

private String r_id;
public Int32 report_id
{
    get { return r_id != null ? Convert.ToInt32(r_id) : 0; }
    set { r_id = value; }
}

grdReportKeywordsRefresh 方法:

protected void grdReportKeywordsRefresh(int report_id)
{
    grdKeywords.DataSource = conn.GetKeywordsByRepId(report_id);
    grdKeywords.DataBind();
}

【问题讨论】:

  • 这会在您渲染页面时调用函数。是你想要的吗?
  • 你能发布 grdReportKeywordsRefresh 方法,或者至少描述一下它应该做什么? __doPostBack 的第一个参数应该是控制您要运行的操作的 ID。这可以是例如按钮等。或者您可以添加一些字符串并在页面生命周期(即在 page_load 中)检查此值(Page.Request("__EVENTTARGET"))并基于此运行您的代码。这有帮助吗?
  • @Ales:此方法刷新 GridView(我将其添加到问题中)。你能告诉我你的替代解决方案的例子吗?
  • @Ales:不,我不是。我有没有 AJAX 扩展的 VS2005 :(
  • 我已经相应地改变了我的答案

标签: c# jquery asp.net jquery-ui


【解决方案1】:

人们是对的,你在混合东西:)

应该是这样的:

<script type="text/javascript">
this is what you call:
  __doPostBack('updateMyGrid', '')
</script>

在代码隐藏中(使用VB.NET,如果你使用C#,我会更改它)

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  If Page.IsPostBack AndAlso Page.Request("__EVENTTARGET") = "updateMyGrid" Then
    'rebind your grid here
  End If
End Sub

c#(只是从头开始)

protected void Page_Load(object sender, EventArgs e) {
  if(IsPostBack && Page.Request["__EVENTTARGET"] == "updateMyGrid") {
    //rebind here
  }
}

【讨论】:

  • op 确实在他们的示例中使用了 c#
  • Ales,感谢您的帮助,但 Page.Request.Params.Get("__EVENTTARGET") (可能仅在 c# 中)。你能说一下为什么 .aspx 页面没有显示在弹出窗口中吗?
  • 是否有一些 javascript 错误?我会尝试使用一些 html 检查器(即 chrome 检查器或 FireBug)来查找原因
  • 是的,我犯了一个愚蠢的错误,再次感谢您的帮助!
【解决方案2】:

您正在混合客户端和服务器代码。

您还将另一个页面完全加载到您的弹出窗口中,因此它没有显示 default.aspx 中的任何内容也就不足为奇了。

您可以在关闭弹窗时在隐藏字段中设置一个值,然后在服务器上强制回发&,检查是否设置了隐藏字段值,如果是则调用该函数。

西蒙

【讨论】:

    【解决方案3】:

    report_id 在哪里定义?您不能使用在 javascript 中设置的变量,因为服务器端代码 () 会在服务器呈现页面时执行。

    【讨论】:

    • report_id 是页面的类属性
    • 我可以看看它是如何声明的吗?
    • 我把它加到了问题的末尾
    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多