.Net:在没有回发的情况下将值从JavaScript传递到C#

时间:2018-10-15 15:57:20

标签: javascript c# .net devexpress

我使用第三方gridview(DevExpress Web表单ASPxGridView)制作.Net Web应用。

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

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

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

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

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

有人知道一种不通过回传将客户端变量传递给c#的方法,还是从JavaScript调用非静态c#方法的方法吗?任何建议将不胜感激。

2 个答案:

答案 0 :(得分:0)

最基本的方法包括两部分,第1部分:在现有网格页面上添加ajax js函数,以处理click事件并发出数据请求。第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
          }
    }});
});

答案 1 :(得分:0)

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

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

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