I have an ASP.NET user control "Upload.ascx" that contains a RadUpload
control that I am using on a page in Sitefinity. Whenever I select a
file to upload and submit the form, the ProgressArea appears, but the
progress bar does not update, and the remaining time is a really huge
number. Then the page posts back, resulting the the progress of the
upload never being shown (it stays at 0%, even for large files). I
searched around and found some similar issues online, but none of the
solutions fixed my problem. I tried switching to a RadAsyncUpload
control and changing my web.config runAllManagedModulesForAllRequests
value to "true", but neither worked. I also tried a Telerik sample
project with a RadUpload control that I found in another support thread,
but that also displayed the same issue (but it works on the example
page in the Telerik documentation). Might this be an issue with my DLL? I
am using Telerik.Web.UI v2012.1.215.40 (Runtime v4.0.30319).
Thanks in advance for any assistance you can offer!
ASCX:
ASCX.CS:
Thanks in advance for any assistance you can offer!
ASCX:
<%@
Control Language="C#" AutoEventWireup="true" CodeFile="Upload.ascx.cs"
Inherits="WebComponents.UserControls.CommonControls.Upload.Upload.Upload"
%>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<
script
type
=
"text/javascript"
>
function ValidatePhoneNumber(sender, args) {
if (document.getElementById('<%= txtPhonePartOne.ClientID %>').value.length <
1
|| document.getElementById('<%= txtPhonePartTwo.ClientID %>').value.length <
1
|| document.getElementById('<%= txtPhonePartThree.ClientID %>').value.length <
1
) {
args.IsValid
=
false
;
}
}
//auto move cursor through phone fields
function checkLen(fieldToMeasure, fieldToJump) {
var
currentLength
=
document
.getElementById(fieldToMeasure).value.length;
if (currentLength == 3) { document.getElementById(fieldToJump).focus() }
}
//client side validation for phone number
function checkPhone(sender, args) {
if (document.getElementById('<%= txtPhonePartOne.ClientID %>').value.length <
1
|| document.getElementById('<%= txtPhonePartTwo.ClientID %>').value.length <
1
|| document.getElementById('<%= txtPhonePartThree.ClientID %>').value.length <
1
) {
args.IsValid
=
false
;
}
}
//validate valid file type
function ValidateRadUpload1(source, arguments) {
arguments.IsValid
=
getRadUpload
('<%= radUpload.ClientID %>').validateExtensions();
}
//update label for upload
function updateUploadLabel(fieldToUpdate, textToDisplay) {
var pageIsValid = Page_ClientValidate();
if (pageIsValid) {
document.getElementById(fieldToUpdate).innerHTML = textToDisplay;
}
}
</
script
>
<
asp:Label
ID
=
"lblErrorMessage"
runat
=
"server"
></
asp:Label
>
<
asp:ValidationSummary
ID
=
"vsForm"
runat
=
"server"
CssClass
=
"errorsummary"
/>
<
fieldset
class
=
"radContainer"
>
<
legend
>
<
asp:Literal
ID
=
"litDocumentUploadHeader"
runat
=
"server"
Text="<%$ Resources:litDocumentHeader %>"></
asp:Literal
></
legend
>
<
p
>
<
asp:Literal
ID
=
"litAllowedFileTypes"
runat
=
"server"
Text
=
""
/></
p
>
<
div
class
=
"input"
>
<
label
for
=
"ddlInquiryType"
>
<
asp:Literal
ID
=
"litDocumentType"
runat
=
"server"
Text="<%$ Resources:litDocumentType %>"></
asp:Literal
>
</
label
>
<
asp:DropDownList
ID
=
"ddlDocumentType"
CssClass
=
"first"
runat
=
"server"
AppendDataBoundItems
=
"true"
>
</
asp:DropDownList
>
<
asp:RequiredFieldValidator
ID
=
"reqDocumentType"
ErrorMessage="<%$ Resources:reqDocumentType %>"
ControlToValidate="ddlDocumentType" Display="Dynamic" runat="server" Text="*"
CssClass="errorindicator"></
asp:RequiredFieldValidator
>
</
div
>
<
br
class
=
"end"
/>
<
div
class
=
"file"
>
<
asp:Literal
ID
=
"litUpload"
runat
=
"server"
Text="<%$ Resources:litUpload %>" /><
br
/>
<
telerik:RadUpload
ID
=
"radUpload"
runat
=
"server"
InputSize
=
"45"
Width
=
"500px"
Skin
=
"Test"
EnableEmbeddedSkins
=
"false"
/>
<
asp:CustomValidator
runat
=
"server"
Display
=
"none"
CssClass
=
"errorindicator"
ID
=
"cusFileType"
ClientValidationFunction
=
"ValidateRadUpload"
OnServerValidate
=
"radUploadCustomValidator_ServerValidate"
ErrorMessage="<%$ Resources:cusFileType %>" />
</
div
>
<
div
>
<
asp:Label
ID
=
"lblNoResults"
runat
=
"server"
Visible
=
"True"
CssClass
=
"transferMessage"
/>
<
telerik:RadProgressManager
ID
=
"radProgressManager"
runat
=
"server"
/>
<
telerik:RadProgressArea
runat
=
"server"
ID
=
"ProgressArea1"
DisplayCancelButton
=
"True"
ProgressIndicators
=
"TotalProgressBar,
TotalProgress, RequestSize, FilesCountBar, FilesCount,
SelectedFilesCount, CurrentFileName, TimeElapsed, TimeEstimated,
TransferSpeed"
Skin
=
"Default"
EnableEmbeddedSkins
=
"true"
>
<
Localization
Uploaded
=
"Uploaded"
/>
</
telerik:RadProgressArea
>
</
div
>
</
fieldset
>
<
div
class
=
"input comment"
>
<
asp:Literal
ID
=
"litComments"
runat
=
"server"
Text="<%$ Resources:litComments %>"></
asp:Literal
>
<
asp:RegularExpressionValidator
ID
=
"regexComments"
runat
=
"server"
CssClass
=
"errorindicator"
ControlToValidate
=
"txtComments"
Text
=
"*"
Display
=
"Dynamic"
EnableClientScript
=
"false"
ErrorMessage="<%$ Resources:regexComments %>" ValidationExpression="^.[\s\S]{1,10000}$"></
asp:RegularExpressionValidator
>
<
asp:TextBox
ID
=
"txtComments"
runat
=
"server"
TextMode
=
"MultiLine"
MaxLength
=
"10000"
/>
</
div
>
<
div
class
=
"end"
>
</
div
>
<
div
id
=
"divSubmit"
>
<
asp:Button
ID
=
"btnSubmit"
runat
=
"server"
Text="<%$ Resources:btnSubmit %>" OnClick="btnSubmit_Click" />
</
div
>
ASCX.CS:
using
InstalledWebComponents.Library.Email;
using
System;
using
System.Collections;
using
System.Collections.Generic;
using
System.Configuration;
using
System.Linq;
using
System.Text;
using
System.Text.RegularExpressions;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
Telerik.Sitefinity.GenericContent.Model;
using
Telerik.Sitefinity.Lists.Model;
using
Telerik.Sitefinity.Modules.Lists;
using
Telerik.Sitefinity.Workflow;
using
Telerik.Web.UI;
namespace
WebComponents.UserControls.CommonControls.Upload.Upload
{
public
partial
class
Upload : System.Web.UI.UserControl
{
private
const
string
LIST_NAME =
"Upload Document Types"
;
Regex regEx =
new
Regex(@
"^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-| )?[0-9]{4}$"
);
private
string
_onCompletionRedirectUrl;
private
string
ldc =
string
.Empty;
[Personalizable(PersonalizationScope.Shared), WebBrowsable(), WebDisplayName(
"On completion redirect user to this page"
), WebDescription(
"On completion redirect user to this page"
)]
[System.ComponentModel.Description(
"On completion redirect user to this page."
)]
public
string
OnCompletionRedirectUrl
{
get
{
if
(
string
.IsNullOrEmpty(_onCompletionRedirectUrl))
_onCompletionRedirectUrl =
"~/thankyou"
;
return
_onCompletionRedirectUrl;
}
set
{ _onCompletionRedirectUrl = value; }
}
protected
void
Page_Init(
object
sender, EventArgs e)
{
BindInquiryTypes();
}
protected
void
Page_Load(
object
sender, EventArgs e)
{
txtPhonePartOne.Attributes.Add(
"onKeyUp"
,
string
.Format(
"checkLen('{0}','{1}')"
, txtPhonePartOne.ClientID, txtPhonePartTwo.ClientID));
txtPhonePartTwo.Attributes.Add(
"onKeyUp"
,
string
.Format(
"checkLen('{0}','{1}')"
, txtPhonePartTwo.ClientID, txtPhonePartThree.ClientID));
SetObjectsVisibility();
string
domain = Request.Url.Host.ToUpperInvariant();
}
protected
void
validatePhoneNumber_ServerValidate(
object
source, ServerValidateEventArgs args)
{
string
phoneNumber = EmailForm.CombinePhoneNumberParts(txtPhonePartOne.Text, txtPhonePartTwo.Text, txtPhonePartThree.Text);
if
(phoneNumber.Length > 0)
{
args.IsValid = regEx.Match(phoneNumber).Success;
}
}
private
void
BindInquiryTypes()
{
ddlDocumentType.Items.Clear();
List<Telerik.Sitefinity.Lists.Model.ListItem> list = EmailForm.GetList(LIST_NAME).ListItems.ToList();
List<
string
> itemList =
new
List<
string
>();
itemList.Add(
"Select Document Type"
);
for
(
int
index = 0; index < list.Count; index++)
{
if
(!itemList.Contains(list[index].Title))
{
itemList.Add(list[index].Title);
}
}
ddlDocumentType.DataSource = itemList;
ddlDocumentType.DataBind();
}
private
void
SetObjectsVisibility()
{
string
strAllowedFileType = EmailForm.FindListItem(EmailForm.GetList(
"Upload Document Allowed File Types"
),
"allowed file types"
).Content.ToString();
string
[] arrAllowedFileTypes = strAllowedFileType.Split(
new
char
[] {
','
});
radUpload.ControlObjectsVisibility = ControlObjectsVisibility.None;
radUpload.ControlObjectsVisibility |= ControlObjectsVisibility.AddButton;
radUpload.ControlObjectsVisibility |= ControlObjectsVisibility.RemoveButtons;
radUpload.MaxFileInputsCount = 5;
radUpload.MaxFileSize = 524288000;
//500MB
radUpload.AllowedFileExtensions = arrAllowedFileTypes;
radUpload.Localization.Add = GetLocalResourceObject(
"RadUploadAddButtonText"
).ToString();
litAllowedFileTypes.Text = strAllowedFileType;
}
protected
void
btnSubmit_Click(
object
sender, EventArgs e)
{
if
(!Page.IsValid)
return
;
if
(txtPhonePartOne.Text.Length < 3 || txtPhonePartTwo.Text.Length < 3 || txtPhonePartThree.Text.Length < 4)
{
lblErrorMessage.Text =
"Phone Number is not valid"
;
return
;
}
SendEmail();
ShowResults();
if
(lblErrorMessage.Text.Length == 0)
Response.Redirect(OnCompletionRedirectUrl);
}
private
void
ShowResults()
{
//load results into session variable
//todo create session handling class
ArrayList arlUploadedFiles =
new
ArrayList();
ArrayList arlInvalidFiles =
new
ArrayList();
if
(radUpload.UploadedFiles.Count > 0)
{
foreach
(UploadedFile file
in
radUpload.UploadedFiles)
{
arlUploadedFiles.Add(file.FileName.ToString());
}
Session[
"SuccessfullyUploadedFiles"
] = arlUploadedFiles;
}
if
(radUpload.InvalidFiles.Count > 0)
{
foreach
(UploadedFile invalidfile
in
radUpload.InvalidFiles)
{
arlInvalidFiles.Add(invalidfile.FileName.ToString());
}
Session[
"InvalidFilesRejectedForUpload"
] = arlInvalidFiles;
}
}
private
bool
SendEmail()
{
//Sends submitted form data and file(s)
return
true
;
}
private
string
BuildEmailBody()
{
//Builds email body and returns string
return
"Email body content"
}
protected
void
radUploadCustomValidator_ServerValidate(
object
source, ServerValidateEventArgs eventArgs)
{
eventArgs.IsValid = (radUpload.InvalidFiles.Count == 0);
}
}
}