Я совсем недавно начал разрабатывать веб-формы asp.net, и у меня такая ситуация, что я просто не могу понять это самостоятельно.
У меня есть кнопка ссылки, при нажатии на которую я хотел бы открыть модальное всплывающее окно. Модальное всплывающее окно содержит панель с сеткой, которую я хотел бы связать (заполнить) до того, как будет показано модальное всплывающее окно на основе метода С#.
По сути, мне нужно сделать, когда пользователь нажимает кнопку,
(1) заполняется вид сетки внутри модального всплывающего окна
(2) будет отображаться модальное всплывающее окно, показывающее пользователю полностью заполненную сетку.
Вот фрагменты кода:
<%-- Relationship Type--%>
<tr style="background-color:#eee;">
<td class="borderTd">
<asp:LinkButton ID="lnkRelTypes" runat="server" Text="Relationship Type:" OnClick="btPopulateRelTypes_Click" > </asp:LinkButton>
</td>
<td style=" border:0;">
<asp:DropDownList ID="ddlRelationshipType" runat="server" TabIndex="3" CssClass="field"> </asp:DropDownList>
</td>
</tr>
<ajaxToolkit:ModalPopupExtender ID="modalppSearchRelTypes" runat="server" TargetControlID="lnkRelTypes"
PopupControlID="panelMaintainRelTypes" BackgroundCssClass="modalBackground" OkControlID="OkButton"
DropShadow="true" />
Проблема в том, что когда я отлаживаю его, когда я нажимаю кнопку ссылки, событие никогда не запускается, и модальное всплывающее окно отображается, конечно, без ничего, потому что представление сетки никогда не заполнялось.
Я попытался создать функцию javascript, которая вызывала бы метод (как веб-метод), назначая ему событие OnClientClick кнопки, но при этом внутри моего статического веб-метода я не могу использовать какие-либо элементы управления страницей, такие как gridview, который Я пытаюсь заселить.
ПОСЛЕДНЕЕ ИЗМЕНЕНИЕ, предоставляющее JS, используемый для вызова WebMethod, который будет заполнять представление сетки
<script type="text/javascript">
function PopulateRelTypes()
{
PageMethods.GetResult(OnSucess, OnError);
function OnSucess(result)
{ }
function OnError(result) {
alert(result);
}
}
Код С#:
[WebMethod]
public static string GetResult()
{
string result = GetRelTypes();
return result;
}
Сообщение об ошибке: для нестатического поля, метода или свойства «GetRelTypes()» требуется ссылка на объект.
Это была функция JS, которая была назначена событию OnClientClick кнопки ссылки, но она не позволяла мне использовать какие-либо элементы управления страницей (например, gridview, метки и т. д.).
ПОЗЖЕ позже ИЗМЕНИТЬ :)
Я думаю, что забыл упомянуть кое-что важное, а именно то, что и кнопка ссылки, и вид сетки из модального всплывающего окна находятся внутри UpdatePanels. Поэтому обратная передача страницы никогда не запускается при нажатии кнопки ссылки.
Единственный случай, когда я заставил это работать, - это создать вторую кнопку внутри модального всплывающего окна, которая заполнила бы мое представление сетки, вызвав метод GetRelTypes() (который был изменен на пустоту, а не на строку), но это не так, как я хочу, чтобы это было...
Любые предложения, пожалуйста?
Мое решение:
Для кнопки ссылки из основной формы я добавил событие OnClientClick для вызова функции JS следующим образом:
Кнопка ссылки:
<asp:LinkButton ID="lnkRelTypes" runat="server" Text="Relationship Type:" OnClientClick="PopulateRelTypes();" > </asp:LinkButton>
JS-функция:
<script type="text/javascript">
function PopulateRelTypes()
{
document.getElementById('<%= btPopupLoad.ClientID %>').click();
}
</script>
Функция javascript вызывает скрытую кнопку, которую я разместил внутри модального всплывающего окна. Эта скрытая кнопка имеет событие щелчка на стороне сервера, которое заполняет вид сетки, как мне нужно:
Скрытая кнопка Modalpopup:
<asp:Button ID="btPopupLoad" runat="server" Text="Load"
CssClass="button" onclick="btPopupLoad_Click" style="display:none;"/>
Метод С# для получения данных:
protected void btPopupLoad_Click(object sender, EventArgs e)
{
GetRelTypes();
}
Слава богу, я наконец нашел решение этой проблемы, это сводило меня с ума!!! :) Я просто надеюсь, что это решение когда-нибудь поможет другим (например, мне)!