JavaScript函数成功但不调用代码隐藏

时间:2016-02-04 14:00:53

标签: javascript c# jquery asp.net twitter-bootstrap

我的ASP站点中的Code-Behind和JavaScript一起出现问题。

我概述了我公司的活动,当您单击“详细信息”按钮时,它应该转到数据库并收集有关该特定活动的所有可用数据,然后在Bootstrap模式窗口中显示。

唯一的问题是,目前唯一发生的事情是模态窗口显示但没有别的。甚至没有调用Code-Behind。

这是我的JavaScript:

[WebMethod]
public static void GetFullActivityDescription(Int32 id)
{
    mHeader.InnerHtml = "<h1>Test</h1>";
    mBody.InnerHtml = id + "";
}

这是C#:

/// <summary>
/// modal_header control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
public static System.Web.UI.HtmlControls.HtmlGenericControl modal_header;

/// <summary>
/// modal_body control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
public static System.Web.UI.HtmlControls.HtmlGenericControl modal_body;

我必须进入运行全局元素的Partial Class,并将其默认声明更改为静态声明,以便我可以操作C#中的元素:

<div id="full-activity-description-modal" class="modal fade" role="dialog">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header" runat="server" id="modal_header"></div>
            <div class="modal-body" runat="server" id="modal_body"></div>
            <div class="modal-footer">
                <button type="button" class="btn btn-danger btn-bg" data-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

这是HTML:

html.Append("<td>");
html.Append("<a onclick=\"GetFullActivityDescription(" + id + ");\" class=\"btn\" style=\"background-color: #F3F3F3; color: #000000; font-size: 18px;\">");
html.Append("<span class=\"ion ion-clipboard\"></span>");
html.Append("</a>");
html.Append("</td>");
html.Append("</tr>");

我需要这样做有点复杂,因为我需要ASP来 NOT 提交它所在的表格。否则它会变得毫无意义,因为模态窗口会被重置。

现在,“拼图”的最后一部分是生成描述按钮的方式:

<asp:ScriptManager runat="server" EnablePageMethods="true" EnablePartialRendering="true">
    <Scripts>
        <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="bootstrap" />
        <asp:ScriptReference Name="respond" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>
    </Scripts>
</asp:ScriptManager>

将其添加到活动表中的每个条目,以便将正确的ID传递给JavaScript函数。你最终得到了这个:

enter image description here

所以只是陈述一个问题:为什么我的JavaScript函数被调用但我的C#代码隐藏不是?

编辑1

这是通过Site.Master添加的ScriptManager,该页面继承自。

{{1}}

2 个答案:

答案 0 :(得分:0)

在C#代码中,尝试ScriptManager.RegisterStartupScript(yourcontrol,this.getType(),"theNameOfYourJSFunction", "theNameOfYourJSFunction( + valueToPass + )", True)。您还需要将C#代码放入绑定到控件的某种事件中,以便调用C#代码。就目前而言,服务器端没有任何东西可以调用您编写的C#代码。例如,在GetFullActivityDescription函数中调用Page_Load

答案 1 :(得分:-1)

我认为您只需要更改您的Javascript和代码隐藏。从您的代码中,我可以看到您正在使用JQuery,我也使用JQuery来处理Modal。

的JavaScript

function GetFullActivityDescription(id) {
    $.get("PageName.aspx/MethodName",{ id: id }, function(data) {

        $('#full-activity-description-modal').modal('show');

    });
}

C#

[WebMethod]
public static void GetFullActivityDescription(Int32 id)
{
    mHeader.InnerHtml = "<h1>Test</h1>";
    mBody.InnerHtml = id + "";
}