我正在使用C#和Visual Studio 2008 SP1开发ASP.NET应用程序.我正在使用WebForms.
我有一个带有两个UpdatePanel的ASPX页面,一个在左边,它包含一个TreeView,另一个在右边,我动态加载用户控件.
我在右侧面板上使用的一个用户控件具有FileUpload控件和一个用于将该文件保存在服务器上的按钮.保存控件的ascx代码是:
<asp:UpdatePanel ID="UpdatePanelBotons" runat="server" RenderMode="Inline"
UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="Save" runat="server" Text="Guardar"
onclick="Save_Click" CssClass="button" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="Save" />
</Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
我做了一个完整的回发,将文件上传到服务器并将其保存到数据库.但我总是在FileUpload.HasFile上得到False.
我的问题是正确的UpdatePanel.我需要它动态加载用户控件.此面板有三个UpdatePanel,用于加载我使用的三个用户控件.
也许我可以使用异步文件上传器或删除正确的更新面板并执行完整回发以动态加载控件.
有什么建议?
更新:
RegisterPostBackControl 工作 ...第二次点击保存按钮.第一次FileUpload.HasFile为FALSE,第二次为TRUE.
第二次更新
第一次单击时我还检查了ScriptManager.IsInAsyncPostBack并且为FALSE.我不明白任何事!
为什么?
第一次加载用户控件的代码,以及每次回发的代码是:
DynamicControls.CreateDestination ud =
this.LoadControl(ucUrl) as DynamicControls.CreateDestination;
if (ud != null)
{
Button save = ud.FindControl("Save") as Button;
if (save != null)
ScriptManager1.RegisterPostBackControl(save);
PanelDestination.Controls.Add(ud);
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我遇到了一个看似非常着名的问题:我的updatepanel会触发一个完整的回发而不是异步回发.正常的解决方案是给你动态添加的所有控件,我已经完成了,但我仍然得到一个完整的回发而不是我的异步回发...
这是代码:
HTML:
<asp:UpdatePanel ID="ItemsUpdatePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<Triggers>
</Triggers>
<ContentTemplate>
<asp:ListView ID="PlayerItems" runat="server" GroupItemCount="5"
onitemdatabound="PlayerItems_ItemDataBound">
<LayoutTemplate>
... Listview stuff ...
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
有趣的部分是后面的C#代码(方法PlayerItems_ItemDataBound),如下所示:
ImageButton imgBtn = new ImageButton();
imgBtn.ID = "itemBtn";
imgBtn.Width = Unit.Pixel(30);
imgBtn.ImageUrl = "~/Images/Game/Items/" + myItem.ItemImageUrl;
ContextMenu menu = new ContextMenu();
menu.BoundControls.Add(imgBtn);
menu.ItemCommand += new CommandEventHandler(menu_ItemCommand);
menu.AutoHide = true;
menu.RolloverColor = Color.Gray;
menu.ID = "MenuMenu";
Panel panel = (Panel)(e.Item.FindControl("ItemPanel"));
panel.Controls.Add(imgBtn);
panel.Controls.Add(menu);
AsyncPostBackTrigger trig = new AsyncPostBackTrigger();
trig.ControlID = menu.UniqueID;
trig.EventName = "ItemCommand";
ItemsUpdatePanel.Triggers.Add(trig);
Run Code Online (Sandbox Code Playgroud)
所以,我实际上在菜单中添加了AsyncPostBackTrigger,因此应该注册ItemCommand事件.当我在此上下文菜单中单击某个项目时发生的事情是完整的回发事件.
我一直试图在没有帮助的情况下玩ChildrenAsTriggers.我也一直在上下移动AsyncPostBackTrigger代码,也没有帮助. …
我有一个更新面板,其条件和ChildrenAsTriggers的UpdateMode设置为false.我只想要几个控件来导致异步回发:
<asp:UpdatePanel ID="updPnlMain" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
// ...
<asp:Repeater ID="rptListData" runat="server">
<ItemTemplate>
<asp:Button ID="btnAddSomething" runat="server" OnClick="btnAddSomething_Click" />
</ItemTemplate>
</asp:Repeater>
// ...
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddSomething" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
我尝试加载此页面时收到以下错误:
A control with ID 'btnAddSomething' could not be found for the trigger in UpdatePanel 'updPnlMain'.
Run Code Online (Sandbox Code Playgroud)
由于我的btnAddSomething控件位于转发器中,并且可能不会立即存在,因此它的行为就像它不存在一样.我怎么能绕过这个?
我有一个与jquery DatePicker关联的asp:TextBox.此输入有一个onTextChangedEvent,用于更新Literal Control.
所有这些代码都在UpdatePanel中,因此Literal Control会更改,但页面不会刷新.
我面临的问题是,当事件触发时,显示DatePicker的图像会消失.这是我的一段代码:
<asp:UpdatePanel ID="UpdatePanel" runat="server">
<ContentTemplate>
<asp:TextBox runat="server" OnTextChanged="EditFromDate_TextChanged"
AutoPostBack="true"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
然后我有:
$(document).ready(function()
{
$("#EditFromDate").datepicker({ ... });
});
Run Code Online (Sandbox Code Playgroud)
我应该将启动DatePicker的代码放在别处吗?我尝试使用Page.RegisterStartup将其放在页面加载中,但结果相同.
谢谢!
[更新]不幸的是我从来没有机会解决这个问题.但是,下面有一些有趣的回答值得尝试其他想要做类似事情的读者.
我正在尝试从运行ASP.NET的站点解析数据.这个站点有一个我已成功遍历的登录页面(使用合法帐户)并存储了cookie,但是当我深入到该站点时,我需要通过异步回发更新UpdatePanel来导航它.UpdatePanel包含我想要的数据.
我正在尝试使用PHP和curl来完成所有这些.我可以成功加载初始页面.当我使用所有相关数据(通过Firefox的Tamper Data插件获取)发布到我的目标页面时,curl返回的回显结果总是清除我的页面.通常,回显结果只会在页面下方打印出来(或者发出一些错误/乱码文本).curl_error()不会打印任何内容,所以返回给我的内容有问题.
我很想知道如何从这里开始.请告诉我是否:a)你知道我得到了什么错误,b)如果甚至可以使用专门的PHP,并且c)如果相反,我需要刷掉javascript来与ASP.NET的UpdatePanels交互.
$uri = "TARGETURL";
$cl=curl_init();
curl_setopt($cl, CURLOPT_URL, $uri);
curl_setopt($cl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0');
curl_setopt($cl, CURLOPT_COOKIEFILE, "/tmp/cookie2.txt");
curl_setopt($cl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($cl, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt($cl, CURLOPT_POST, 1);
$postdata=array(
"__VIEWSTATE" => $viewstate,
"OTHER DATA" => "asdfkljsddflkjshdjf",
"__ASYNCPOST" => "true",
);
echo "<PRE>";
print_r($postdata);
echo "</PRE>";
curl_setopt ($cl, CURLOPT_POSTFIELDS, $postdata);
$result = curl_exec($cl); // execute the curl command
echo $result;
Run Code Online (Sandbox Code Playgroud)
这是我从服务器收到的标题和正文(通过电子邮件发送给我自己以绕过使用echo语句发生的页面清除):
HEADER RESPONSE:
HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: …Run Code Online (Sandbox Code Playgroud) 我在这里看到了几个关于使用Recaptcha和ASP.net UpdatePanels的其他帖子,但还没有找到解决我的问题的答案.
这是我的ASPX代码:
<asp:UpdatePanel ID="updRecaptcha" runat="server" UpdateMode="Always">
<ContentTemplate>
<recaptcha:RecaptchaControl ID="btnrecaptcha" runat="server" Theme="clean" PrivateKey"<%$ Resources: General, CaptchaPrivateKey %>" PublicKey="<%$ Resources: General, CaptchaPublicKey %>" />
<asp:Label ID="recaptchaerror" runat="server" style="color: Red;"/>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
因此,Recaptcha控件存在于使用多个.Net验证控件(例如RequiredFieldValidator)的用户控件中.在允许进程继续之前,我需要对Recaptcha和ASP.net控件进行验证.
如果任何验证失败(Recaptcha或.Net),则Recaptcha控件将消失.看一下HTML源代码,在Postback之后根本没有加载控件 - 尽管我告诉UpdatePanel要更新.
我无法完全重新加载页面,因为这一切都显示为页面顶部的叠加层,页面后面还有其他表单字段.
请帮忙!
编辑:
当Recaptcha失败时从C#我调用这段代码:
ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "InvalidRecaptcha", "alert('Recaptcha Failed');Recaptcha.reload();alert('Recaptcha Reloaded');", true);
Run Code Online (Sandbox Code Playgroud)
两个警报语句都会触发,但Recaptcha仍然无法加载.
我里面有一个Updatepanel和Gridview.
<asp:UpdatePanel ID="uplPanel" UpdateMode="Conditional" runat="server" OnLoad="uplPanel_Load">
<ContentTemplate>
<asp:GridView ID="gvPrList" runat="server" AutoGenerateColumns="false" AllowPaging="false"
AllowSorting="false" CssClass="list-table" HeaderStyle-CssClass="header">
<Columns>
<ItemTemplate>
<asp:Button ID="btnEdit" runat="server" Text="Edit" CssClass="button save" OnCommand="onPrItemCmd"
CommandName="editRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" />
<asp:Button ID="btnDelete" runat="server" Text="Delete" CssClass="button save" OnCommand="onPrItemCmd"
CommandName="deleteRow" CommandArgument='<%#Bind("ID") %>' Style="width: 80px" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
Run Code Online (Sandbox Code Playgroud)
当我点击Griview内部的按钮时,它不会触发事件.任何的想法?
我有一个fileupload控件,它位于更新面板中.我希望在上传完成后显示图像.下面是我的HTML代码
<form id="form1" runat="server">
<br />
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<br />
<div>
<br />
<table width="50%" cellpadding="2" cellspacing="0">
<br />
<tr>
<br />
<td>
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="conditional">
<ContentTemplate>
<br />
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" /><br />
</ContentTemplate>
<Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers>
</asp:UpdatePanel>
<br />
<asp:Image ID="imgViewFile" runat="server" />
</td>
</tr>
</table>
<br />
</div>
<br />
</form>
Run Code Online (Sandbox Code Playgroud)
以下是我的代码
protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
FileUpload1.SaveAs(MapPath("~/TEST/" …Run Code Online (Sandbox Code Playgroud) 我有一个更新面板,并使用PostBackTrigger事件更新进度.但是当我点击按钮时,没有显示更新进度.请查看以下示例代码
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="updatepanelDropDownTaskType" CssClass="Token-setup-popup" DynamicLayout="true">
<ProgressTemplate>
<div id="loading" class="loading">
<asp:Image runat="server" ID="imgBusyIndicator" ImageUrl="~/images/busy-indicator.gif" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="updatepanelDropDownTaskType" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnExport" />
</Triggers>
<ContentTemplate>
<asp:Button ID="btnExport" runat="server" Text="Export To CSV" CssClass="button" CausesValidation="true" onclick="btnExport_Click" ClientIDMode="Static"/></asp:Button>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
我的代码背后
HttpResponse Response = System.Web.HttpContext.Current.Response;
Response.ClearHeaders();
Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
Response.ContentType = FileType;
Response.Write(content);
HttpContext.Current.ApplicationInstance.CompleteRequest();
Run Code Online (Sandbox Code Playgroud) 我有一个UpdatePanel:
<asp:UpdatePanel runat="server" ID="panelFatt">
<ContentTemplate>
<div class="row" runat="server" id="divCFPIva">
<div class="col-md-6">
<div class="form-group">
<label for="txtCF">Codice Fiscale</label>
<asp:TextBox runat="server" ID="txtCF" type="text" MaxLength="16" class="form-control" />
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="txtPIVA">Partita IVA</label>
<asp:TextBox runat="server" ID="txtPIVA" type="text" MaxLength="11" class="form-control" />
</div>
</div>
<div class="col-md-12">
<span class="help-inline hidden lblerror" runat="server" id="lblErrorCFPIva"></span>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group" runat="server" id="divEmail">
<label for="txtEmail" class="control-label">Email*</label>
<div class="controls">
<asp:TextBox runat="server" TextMode="Email" type="text" ID="txtEmail" class="form-control" />
<span class="help-inline hidden lblerror" runat="server" id="lblErrorEmail"></span>
</div>
</div>
</div> …Run Code Online (Sandbox Code Playgroud) updatepanel ×10
asp.net ×9
c# ×6
ajax ×3
asp.net-ajax ×2
postback ×2
.net ×1
curl ×1
file-upload ×1
javascript ×1
jquery ×1
php ×1
recaptcha ×1
repeater ×1