我的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函数。你最终得到了这个:
所以只是陈述一个问题:为什么我的JavaScript函数被调用但我的C#代码隐藏不是?
编辑1
这是通过Site.Master添加的ScriptManager,该页面继承自。
{{1}}
答案 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 + "";
}