【问题标题】:.Net: Passing values from JavaScript to C# without a Postback.Net:将值从 JavaScript 传递到 C# 而无需回发
【发布时间】:2018-10-15 15:57:19
【问题描述】:

我使用第三方 gridview(DevExpress 网络表单 ASPxGridView)制作了一个 .Net 网络应用程序。

假设我有两个网格(Grid1 和 Grid2,都是 devexpress)。

我遇到了一个问题,我需要根据在 Grid1 上单击的列更新 Grid2 中的值(在 onClick 事件期间)。

我能够在 JavaScript 中捕获行和列,但无法将其传递回我的服务器端代码。

网格有一些与编辑模式相关的设置,如果页面执行完整回发,网格会丢失其编辑。

我尝试设置 HiddenField 并调用回发,但这会删除我网格中的编辑。我尝试将变量传递给静态方法,但我无法访问页面上的控件来更新 Grid2。我已经考虑尝试执行回调而不是回发,但看起来回调正在引用客户端方法。

有没有人知道一种在没有回发的情况下将客户端变量传递给 c# 或从 JavaScript 调用非静态 c# 方法的方法?任何建议将不胜感激。

【问题讨论】:

  • 你想谷歌 AJAX。

标签: javascript c# .net devexpress


【解决方案1】:

执行此操作的最基本方法包括两个部分,第 1 部分)在您现有的网格页面上添加一个 ajax js 函数来处理点击事件并发出数据请求。第 2 部分)编写一个单独的 C# 网页以接收您的客户端 Grid1 变量,对其进行相应处理,然后使用 Grid2 的数据进行响应。这是 ajax 调用的一些伪代码,希望对您有所帮助。

//in your javascript section
$("#Grid1Cell").click(function(){
    $.ajax({
      type: "GET",
      url: '@Url.Action("GetGrid2Data", "SomeController")"?yourVar=' + encodeURI(yourVal), 
           //alternatively  url: "yourNonMVCpage.aspx?yourVar=" + encodeURI(yourVal), 
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function (response) {
          if (response.SomeValues == "blah") {
              $("#Grid2Cell").text(response.SomeValues); //update Grid2
          }
    }});
});

【讨论】:

  • 非常感谢。我见过这个,但认为它需要一个静态的 c# 方法来运行。我会试一试。再次感谢。
【解决方案2】:

如果您需要“连接 c#”,则必须向服务器执行请求(使用任何可用的技术 - 回调、回发等)。

如果您需要在此请求期间刷新另一个控件 (Grid2) 呈现,则应返回相应的 HTML 内容作为此请求的结果。

根据提供的描述,您需要实现“级联网格” - 即在更改主网格时更新依赖网格。如果是这样,请使用https://github.com/DevExpress-Examples/how-to-show-detail-information-in-a-separate-aspxgridview-e70 示例中说明的方法,并通过客户端 PerformCallback 方法强制依赖网格自定义回调(并进一步刷新)+ 处理服务器端 CustomCallback 事件。

【讨论】:

  • 哇,现在实现了。这似乎是充分利用了我们当前的 DevExpress 控件及其内置回调的解决方案。到处寻找并在 DevExpress 论坛上发布,找不到像这样简洁的东西。我将在实施后立即将其标记为解决方案。再次感谢。
  • 试过这个解决方案。 CustomCallback 有效,但我们最终丢失了批处理模式编辑。在研究了一些东西之后,看起来在访问服务器后保持“批处理模式”网格编辑不是这些控件可以做的事情。可能将此项目移动到 WinForms 而不是 web。无论如何感谢您的帮助。
  • 我建议您联系 DevExpress 支持以找到最佳解决方案。
  • 我尝试了 DevExpress 支持。基本上告诉在运行服务器端代码后保持对网格的批处理模式编辑不是这个网络网格可以处理的。转移到 WinForms,所有的任务都更容易在那里处理。谢谢。
猜你喜欢
  • 2013-08-19
  • 2019-11-24
  • 2015-09-19
  • 2013-05-24
  • 1970-01-01
  • 2014-01-17
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多