【问题标题】:calling function or server controls in webmethod在 webmethod 中调用函数或服务器控件
【发布时间】:2014-04-11 17:45:10
【问题描述】:

我的html代码是

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

.cs代码

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

protected void lvimg1_Click(object sender, EventArgs e)
{ 
    lvlink1.CssClass = "lv-under1";//another class
    lvimg1.ImageUrl = "~/images/1.jpg";

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

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

    lvlblhd.CssClass = "detailheader";//label
    lvlblsubhd.CssClass = "detailsubheader";//label
    lvtd.BgColor = "#7e65a9";//td
    lvlblhd.Text = "<img src='images/spacer.gif' height='8px' width='5px' /><br/>Wake up";
    lvlblsubhd.Text = "&nbsp;&nbsp;&nbsp;to a fragrant day..";
    lvlbl.Text = "A beautifully fragrance residence";
}

我想要的是:

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

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

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

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

    lvlblhd.CssClass = "detailheader";//label
    lvlblsubhd.CssClass = "detailsubheader";//label
    lvtd.BgColor = "#7e65a9";//td
    lvlblhd.Text = "<img src='images/spacer.gif' height='8px' width='5px' /><br/>Wake up";
    lvlblsubhd.Text = "&nbsp;&nbsp;&nbsp;to a fragrant day..";
    lvlbl.Text = "A beautifully fragrance residence";    
}

我该怎么办?我还必须在许多功能中使用 lvimg1_Click(null, null);lvlink1.CssClass = "lv-under1"; 这些 不是网络方法

我是新手,如果您想了解更多信息,请告诉我

【问题讨论】:

  • 据我所知,您不能在 Web 方法中调用服务器控件....
  • 可以,但是不知道具体的方法
  • 您的 webmethod 没有参数,但您的 Ajax 调用使用 value:test 调用它。从通话中删除它,您应该点击网络方法。
  • @christiandev 这不是问题,问题是我应该如何将链接按钮调用到 webmethod
  • 这是一个的问题,因为那行不通,因此我猜是编辑?

标签: c# jquery asp.net


【解决方案1】:

它只能在瞬间请求时完成。您可以在静态方法中创建服务器控件对象并对其进行更改,但如果您希望将更改应用于客户端,则需要为来自服务器响应的进程字符串添加客户端代码。
所以通常你可以跳过服务器端的方法,一次在客户端上做所有的事情

更新
如果您只需要更改 css 类和图像 url,则不需要 ajax 和 web 方法,您可以像这样在客户端一次完成所有操作

<script type="text/jscript">
    function imgclick() {
        $('#<%= lvlink1.ClientID %>').removeClass().addClass("lv-under1"); //another class
        $('#<%= lvimg1.ClientID %>').attr('src','<%= ResolveUrl("~/images/1.jpg") %>');

        $('#<%= lvlink2.ClientID %>,#<%= lvlink3.ClientID %>').addClass("lv-under");
        $('#<%= lvimg2.ClientID %>, #<%= lvimg3.ClientID %>').attr('src', '<%= ResolveUrl("~/images/spacer.gif") %>');
    };
</script>

<img src='images/img1.jpg' onclick='return imgclick();' />  // 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" />

如果使用这种情况 - 不需要网络方法

更新2

function imgclick() {
    ...
    $('#<%= lvlblhd.ClientID %>').removeClass().addClass("detailheader").html("<img src='images/spacer.gif' height='8px' width='5px' /><br/>Wake up")
    $('#<%= lvlblsubhd.ClientID %>').removeClass().addClass("detailsubheader").html("&nbsp;&nbsp;&nbsp;to a fragrant day..");
    $('#<%= lvtd.ClientID %>').css('background-color',"#7e65a9");//td
    $('#<%= lvlbl.ClientID %>').text("A beautifully fragrance residence");
    ...
}

【讨论】:

  • 发现同样的问题,已阅读但看不懂stackoverflow.com/questions/19832028/…
  • @Xtremcool 什么不起作用?您有错误或未应用的类?
  • 我在我的 ajaxcall() 脚本中应用了 imgclick() 脚本,但是 cssclass 和图像没有改变
  • @Xtremcool,你试试我的代码,还是合并你的代码和我的?如果合并可以提供完成代码吗?
  • 嘿,你的代码正在运行,你能帮我如何在标签中插入文本以及如何更改 td 的 bgcolor
【解决方案2】:

据我所知,您无法使用 WebMethods 操作服务器控件,如果您不想对页面进行完整回发,则可以使用更新面板。

这里是 MSDN 中更新面板的概述:http://msdn.microsoft.com/en-us/library/bb399001.aspx

【讨论】:

    猜你喜欢
    • 2014-10-21
    • 2014-01-04
    • 2022-11-02
    • 2015-05-07
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多