【问题标题】:Accessing runat="server" control id in WebMethod在 WebMethod 中访问 runat="server" 控件 ID
【发布时间】:2013-11-07 09:20:18
【问题描述】:

html代码是

<script type="text/jscript">
function ajaxcall() {
     $.ajax({
     type: "POST",
     url: "index.aspx/lvimgclick",
     contentType: "application/json; charset=utf-8",
     data: JSON.stringify({ value: "test" }),
     dataType: "json",      
    });
};
</script>

<img src='images/img1.jpg' onclick='return ajaxcall();' />  // calling script

<asp:LinkButton ID="lvlink1" OnClick="lvimg1_Click" CssClass="lv-under" runat="server"  >
<asp:Image ID="lvimg1" runat="server" ImageUrl="~/images/spacer.gif" />

<asp:LinkButton ID="lvlink2" OnClick="lvimg2_Click" CssClass="lv-under" runat="server"  >
<asp:Image ID="lvimg2" runat="server" ImageUrl="~/images/spacer.gif" />

<asp:LinkButton ID="lvlink3" OnClick="lvimg3_Click" CssClass="lv-under" runat="server"  >
<asp:Image ID="lvimg3" runat="server" ImageUrl="~/images/spacer.gif" />

<asp:LinkButton ID="lvlink4" OnClick="lvimg4_Click" CssClass="lv-under" runat="server"  >
<asp:Image ID="lvimg4" runat="server" ImageUrl="~/images/spacer.gif" />

.cs代码

[WebMethod]
public static string lvimgclick()
{      
    return "hi";
}

protected void lvimg1_Click(object sender, EventArgs e)
{  

    lvlink1.CssClass = "lv-under";
    lvimg1.ImageUrl = "~/images/1.jpg";

    lvlink2.CssClass = "lv-under";
    lvimg2.ImageUrl = "~/images/spacer.gif";

    lvlink3.CssClass = "lv-under";
    lvimg3.ImageUrl = "~/images/spacer.gif";


    lvlink4.CssClass = "lv-under";
    lvimg4.ImageUrl = "~/images/spacer.gif";
}

想要的是:

[WebMethod]
public static string lvimgclick()
{      
    lvimg1_Click(null, null);
    return "hi";
}

[WebMethod]
public static string lvimgclick()
{      
    lvlink1.CssClass = "lv-under";
    lvimg1.ImageUrl = "~/images/1.jpg";

    lvlink2.CssClass = "lv-under";
    lvimg2.ImageUrl = "~/images/spacer.gif";

    lvlink3.CssClass = "lv-under";
    lvimg3.ImageUrl = "~/images/spacer.gif";


    lvlink4.CssClass = "lv-under";
    lvimg4.ImageUrl = "~/images/spacer.gif";
    return "hi";
}

应该怎么办?还必须在许多不是网络方法

【问题讨论】:

  • 我认为您无法访问。您所能做的就是在 webmethod 中读取 Request 并写入 Response :) 您如何调用 webmethod?使用 jQuery?
  • @Murali 有什么好的例子吗?
  • @Murali 是的,我使用 jquery 调用它
  • 如果你需要做的只是改变链接的 CSS,你为什么不直接用 jQuery 来改变它,而不是让 webmethod 通过服务器来做呢?
  • @BeemerGuy 你有什么好的例子吗?我从未尝试过...

标签: c# jquery asp.net


【解决方案1】:

如果你使用 jquery,你可以像下面那样做

 $.ajax({
   type: "POST",
   url: "index.aspx/lvimgclick",
   contentType: "application/json; charset=utf-8",
   data: JSON.stringify({ value: "test" }),
   dataType: "json", 
   success:function(result){

     if(result.cssclass)
     {
       $('#<%= lvlink1.ClientID %>').addClass(result.cssclass);
     }
   }     
  });

在网络方法中

   public class CustomResult
    {
        public string output{ get; set; }
        public string cssclass{ get; set; }
    }

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static CustomResult lvimgclick()
{      
    var result=new CustomResult{output="hi", cssclass="lv-under1"}

    return result;

}

注意:

有时您可能需要使用框架添加的d 访问数据。喜欢result.d.cssclass

编辑:

如果您想更新多个链接按钮,请在 aspx 中为其定义一个通用的 css 类。

<asp:LinkButton ID="lnk1" runat="server" CssClass="menu" Text="Home" />
<asp:LinkButton ID="lnk2" runat="server" CssClass="menu" Text="AboutUs" />

然后在您的 ajax 调用的成功回调中使用类选择器并更新。

  success:function(result){

     if(result.cssclass)
     {
       $('a.menu').addClass(result.cssclass);
     }
   }   

【讨论】:

  • 你去。 Murali 击败了我。
  • 如果我必须使用 4 个链接按钮 id 而不是我应该怎么写??
  • @MiteshJain,将 CssClass 属性添加到所有 4 个链接按钮,如 CssClass="menu",并在 jQuery 中获取所有 4 个,如 $('a.menu').addClass(result.cssclass),而不是 ID。或者您可以添加四行带有 diff ID 并执行此操作。希望你明白了:)
  • 还有响应在 .cs 页面中显示错误 Response.ContentType="application/json";
  • @MiteshJain,更新了 webmethod 以及 ajax 调用。请检查。现在很简单:)
猜你喜欢
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-09
  • 2015-12-07
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多