Обновите UpdatePanel вручную с помощью JavaScript или jQuery
Можно ли обновить UpdatePanel вручную с помощью JavaScript или jQuery?
У меня есть TextBox в верхней части моей страницы. Когда пользователь покидает этот TextBox, я хочу запустить некоторый код сервера (он добавит запись в мою базу данных), а затем внизу страницы у меня есть UpdatePanel, который будет обновлен. В UpdatePanel есть GridView, у которого будет запись для записи)
Ответы
Ответ 1
Просто позвоните в эту функцию javascript. Здесь UpdatePanel1 является идентификатором обновленной панели
<script type="text/javascript">
var UpdatePanel1 = '<%=UpdatePanel1.ClientID%>';
function ShowItems()
{
if (UpdatePanel1 != null)
{
__doPostBack(UpdatePanel1, '');
}
}
</script>
Ответ 2
Я думаю, что получил свой ответ... нужно создать скрытую кнопку в UpdatePanel, а затем вызвать
__doPostBack('<%= Button.ClientID %>','');
Ответ 3
Хотя старый вопрос, я думаю, он заслуживает упоминания еще одного решения.
Если вы не хотите полагаться на скрытые кнопки или иллюзорную __doPostBack, есть опция "ClientScript.GetPostBackEventReference", как описано на этой (также довольно старой, но все же большой) странице:
http://www.4guysfromrolla.com/articles/033110-1.aspx
Короче говоря, если ваш UpdatePanel объявлен следующим образом:
<asp:UpdatePanel ID="MyUpdatePanel" runat="server">...</UpdatePanel>
то в JavaScript вы можете вызвать script, который сгенерирован этим кодом на стороне сервера:
ClientScript.GetPostBackEventReference(MyUpdatePanel, "")
Итак, на странице aspx у вас может быть что-то вроде этого:
function MyJavaScriptFunction(){
doSomeStuff();
<%=ClientScript.GetPostBackEventReference(MyUpdatePanel, "")%>
}
Код между <% и% > будет заменен фактическим вызовом javascript при анализе страницы, поэтому вы можете просмотреть его, просмотрев исходный код страницы в своем браузере.
Это может быть не так просто, как другие ответы, но я предпочитаю это, так как он не вводит никаких дополнительных элементов, а __doPostBack чувствует себя взломанным.: -)
Ответ 4
Ну, в моем случае ответом было использование UniqueID.
ClientID не работал.
__doPostBack("<%=btnTest.UniqueID %>", "");
Это прекрасно работает. Не спрашивайте меня, почему.
Ответ 5
Создать функцию для async-обратной передачи:
function __doPostBackAsync(eventName, eventArgs) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!Array.contains(prm._asyncPostBackControlIDs, eventName)) {
prm._asyncPostBackControlIDs.push(eventName);
}
if (!Array.contains(prm._asyncPostBackControlClientIDs, eventName)) {
prm._asyncPostBackControlClientIDs.push(eventName);
}
__doPostBack(eventName, eventArgs);
}
Вызовите эту функцию там, где вам нужно (в событии click, load event,...):
__doPostBackAsync("UpdatePanel1", "");
В codebehind Page_Load проверьте асинхронную обратную передачу и обновите требуемую UpdatePanel:
if (scriptManager.IsInAsyncPostBack)
{
if (Request["__EVENTTARGET"] == UpdatePanel1.ID)
{
...
//Do update
UpdatePanel1.Update();
}
}
Ответ 6
Вам просто нужно вызвать change() для управления, которое вы активировали в своей updatePanel.
Например:
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="updatePanel1" ChildrenAsTriggers="True">
<ContentTemplate>
<asp:DropDownList ID="ddl" runat="server" Visible="true" AutoPostBack="true" CssClass='someClass' />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddl" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel
<script>
$(".someClass").change();
</script>
Ответ 7
Это работает для меня:
<asp:UpdatePanel id="pnl" UpdateMode="Conditional" runat="server">
<contentemplate>
<div>...your content...</div>
<div style="display: none; line-height: 0pt;">
<asp:Button id="btnUpdate" runat="server" UseSubmitBehavior="false" />
</div>
</contentemplate>
</asp:UpdatePanel>
JavaScript:
function doUpdate()
{
var btn = document.getElementById("<%#= btnUpdate.ClientID %>");
if(btn != null) { btn.click(); }
}
Ответ 8
ASPX:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_OnLoad" > ...
CodeBehind:
protected void UpdatePanel1_OnLoad(object sender, EventArgs e)
{
var rawArguments = Page.Request["__EVENTARGUMENT"];
if(rawArguments != null)
{
var arguments = HttpUtility.ParseQueryString(rawArguments);
switch (arguments["EventName"])
{
case "Event1":
var parameter1Value = arguments["parameter1"];
var parameter2Value = arguments["parameter2"];
break;
}
}
}
JavaScript:
function updatePanelPartialPostback(updatepanelId, eventName, parameters) {
var parametersParsed = "EventName=" + eventName + "&";
for (var propertyName in parameters) {
parametersParsed += propertyName + '=' + parameters[propertyName] + '&';
}
__doPostBack(updatepanelId, parametersParsed);
}
updatePanelPartialPostback('<%= UpdatePanel1.ClientID %>', 'Event1', { parameter1: 'value1', parameter2: 'value2' });