Как загрузить ascx из WebMethod
Я изо всех сил пытался загрузить.ascx (пользовательский элемент управления) после того, как WebMethod выполнил задачу SQL.
WebMethod запускается функцией Ajax
$(document).ready(function () {
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function () {
$(".use-address").on("click", function () {
var $row = $(this).closest("tr");
var $text = $row.find(".nr").text();
var $table = $(this).closest('table').attr('id')
$.ajax({
type: "POST",
url: "wbfMain.aspx/register_activity",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ id_permission: $text, _selected_table: $table }),
dataType: 'json'
});
});
});
});
public partial class wbfMain : System.Web.UI.Page
{
public static Control myControl = new Control();
public static Control myControl_E = new Control();
public static Control myControl_L = new Control();
public static PlaceHolder plch = new PlaceHolder();
protected void Page_Load(object sender, EventArgs e)
{
plch = placeHolder;
myControl_E = Page.LoadControl("wbucEntradas.ascx");
myControl_L = Page.LoadControl("wbucSalidas.ascx");
placeHolder.Controls.Clear();
myControl = Page.LoadControl("wbucWelcome.ascx");
placeHolder.Controls.Add(myControl);
}
protected void lkLoadEntradas_Click(object sender, EventArgs e)
{
plch.Controls.Clear();
plch.Controls.Add(myControl_E);
}
protected void lkLoadSalidas_Click(object sender, EventArgs e)
{
plch.Controls.Clear();
plch.Controls.Add(myControl_L);
}
[WebMethod]
public static void register_activity(int id_permission, string _selected_table)
{
wbfMain main = new wbfMain();
clsSQLCommands SQLCommands = new clsSQLCommands();
SQLCommands.SQL_register_activity_time(id_permission, (_selected_table == "detailTable") ? 1 : 2);
if(_selected_table== "detailTable")
{
//Doesn't load the User control
plch.Controls.Clear();
plch.Controls.Add(myControl_L);
}
else
{
//Doesn't load the user control
plch.Controls.Clear();
plch.Controls.Add(myControl_E);
}
}
}
После того, как WebMethod запускает пользовательский элемент управления, пользовательский элемент управления имеет внутри Page_Load, который запрашивает строку HTML из базы данных для создания таблицы.
public partial class wbucSalidas : System.Web.UI.UserControl
{
clsSQLCommands SQLCommands = new clsSQLCommands();
protected string MyString { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
string test = SQLCommands.SQL_SP_Get_Daily_Activity(1);
MyString = test;
}
}
Пользовательский элемент управления Page_Load запускает следующие 2 метода
public string SQL_SP_Get_Daily_Activity(int option)
{
DataTable data = new DataTable();
string htmlInfo = "";
#if DEBUG
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["EAMStringDebug"].ConnectionString))
#else
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["EAMString"].ConnectionString))
#endif
using (var cmd = new SqlCommand("sp_get_daily_activity", conn))
using (var adapter = new SqlDataAdapter(cmd))
{
cmd.Parameters.Add("@option", SqlDbType.Int).Value = option;
cmd.CommandType = CommandType.StoredProcedure;
adapter.Fill(data);
htmlInfo = ConvertDataTableToHTML(data);
}
return htmlInfo;
}
public static string ConvertDataTableToHTML(DataTable dt)
{
string html = "";
html += "<thead><tr>";
for (int i = 0; i < dt.Columns.Count; i++)
html += "<td>" + dt.Columns[i].ColumnName + "</td>";
html += "<td>" + "Registro de Actividad" + "</td>";
html += "</tr></thead>";
for (int i = 0; i < dt.Rows.Count; i++)
{
html += "<tbody><tr>";
for (int j = 0; j < dt.Columns.Count; j++)
{
if(j == 0)
{
html += "<td class='nr'>" + dt.Rows[i][j].ToString() + "</td>";
}
else
html += "<td>" + dt.Rows[i][j].ToString() + "</td>";
if (j + 1 == dt.Columns.Count)
{
html += "<td>" + "<button type='button' class='btn btn-primary use-address' runat='server'>Seleccionar</button>" + "</td>";
}
}
html += "</tr></tbody>";
}
return html;
}
То, что я пытаюсь сделать, это загрузить ("wbucSalidas.ascx"), если значение, полученное в _selected_table, равно "detailTable", проблема в том, что, если в случае, если ничего не произойдет, я действительно буду признателен за любую помощь, которую вы можете предоставь мне.
Примечание: при нажатии на кнопку ASP Link нет проблем с загрузкой пользовательского элемента управления, проблема во время WebMethod.