如何在 C# 代码中使用 jQuery dialog() 而不是 confirm()?

Posted

技术标签:

【中文标题】如何在 C# 代码中使用 jQuery dialog() 而不是 confirm()?【英文标题】:How to use jQuery dialog() instead of confirm() from within C# code? 【发布时间】:2017-09-05 15:32:04 【问题描述】:

我是一名前端开发人员,对 C# 没有进一步的了解,所以请原谅我可能愚蠢的问题。我目前正在尝试使用 jQuery UI 对话框来替换常见的 javascript alert() 和 confirm() 框。到目前为止,这在前端运行良好,但现在我在其中一个 C# 页面中找到了这个 sn-p,我不知道将它从 confirm() 切换到 jQuery dialog() 的最佳方法是什么。有什么想法吗?

string delCode = "javascript:"
     + "if ( confirm(\'Are you sure you wish to delete this?\')) "
     + this.Page.ClientScript.GetPostBackEventReference(this, string.Empty)
     + "; else  return false; ";

编辑: 在玩了更多之后,我发现如果不添加 OnClientClick 属性以防止单击按钮时的回发,它将无法工作。如何从后面的代码中添加此属性? btnDelete.Attributes.Add("OnClientClick","foo"); 对我不起作用。解决这个问题的正确方法是什么?

这就是我想要的,到目前为止它只是简单的 JS(您可以在 Fiddle 中将 Button 的 C# sn-p 视为 html 内容上方的注释): https://jsfiddle.net/SchweizerSchoggi/xts01hrx/16/

【问题讨论】:

是 .aspx 还是 .cshtml?判断是 Web-Forms 还是 MVC/Web-Api。 this.Page.ClientScript.GetPostBackEventReference(this, string.Empty) 的输出存储在 javascript 变量中,并执行与其他地方相同的操作 @Greg,它是 .aspx 你能发布更多代码,比如下一条语句是什么? @Kris,这只是简单的一行:DeleteButton.Attributes.Add("onclick", delCode); 【参考方案1】:

遗憾的是,要在 Web-Form 内部将 JavaScript 从服务器推送到客户端,您需要利用必须实现的当前代码。通常,为了避免过多的回发问题,我会强制服务器端控件(例如 LinkButton)禁用表单提交。

<asp:LinkButton id="lbExample" runat="server" OnClientClick="launch(); return false;" Text="Launch Dialog" />

<script type="text/javascript">
     function launch() 
          $('[data-rel="Example-Modal"]').dialog(
               // Dialog logic.
          
     
</script>

通过这种方式,它更像是网页或单页应用程序中的传统 JavaScript。基于上述代码的官方文档,正确的额外功能可以在here找到。如上所述,您唯一的选择是动态添加:

ClientScript.RegisterOnSubmitStatement(this.GetType(), "ConfirmSubmit", jQuery); 

您可以简单地以编程方式创建按钮,或者从后面的代码中找到页面中的按钮。我将使用 create 来向您展示我的意思:

public void Page_Load(...)

     var lb = new LinkButton();
     lb.OnClientClick = "launch();"

【讨论】:

好的,我明白了。所以我会去尝试一下 - 至少这也可能是一种“更好的可读性”,至少对我们前端人员来说是这样 ;-) 感谢 Greg,以正确的方式推动我! @SchweizerSchoggi 是的,对于前端,最好这样做。否则,您将不匹配并混淆前端和后端状态。这将尝试为您分开一点。 Web-Forms 在 JavaScript 上相当粗糙,ClientIdMode="static" 也是你的朋友,除非你想使用很多 CSS 类。 我如何从后面的代码中添加 OnClientClick 属性? Attribute.Add("OnClientClick","foo") 对我不起作用..我需要这样解决它,否则我将不得不更改大量文件。 @SchweizerSchoggi 也更新了答案。请记住,在 JavaScript 加载之前,该事件不会触发,因为它还没有准备好。或者,如果您不按顺序添加属性,它不会附加到按钮上,因此它必须位于 Page_Load 或之前。

以上是关于如何在 C# 代码中使用 jQuery dialog() 而不是 confirm()?的主要内容,如果未能解决你的问题,请参考以下文章

使用jquery ui在mvc 4中打开带有参数的模态窗口

如何在 C# 函数中将 jquery 变量作为参数传递

如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?

将地理坐标转换为地址 C# 或 jQuery

如何使用jquery将数据保存在数据库中

如何在 Asp.net C# 中调用 webmethod