Hi,
I am contacting you today to let you know I have found cross-site scripting vectors within the latest version of the RadEditor. I have attached images of the payloads that seem to bypass the XSS filter.
The second payload only works on Firefox browsers, but the first works on Chrome browsers too. While it still requires users to click on the link to trigger XSS, it can be easily social engineered in most situations.
Upon inserting a new record after filtering on the Grid with No records, the exception "No property or field 'Name' exists in type 'DataRowView'" is thrown.
Steps to reproduce:
Code to replicate the issue:
<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" AllowFilteringByColumn="true"
OnNeedDataSource="RadGrid1_NeedDataSource" OnInsertCommand="RadGrid1_InsertCommand">
<MasterTableView CommandItemDisplay="Top" DataKeyNames="ID">
<Columns>
<telerik:GridEditCommandColumn></telerik:GridEditCommandColumn>
<telerik:GridButtonColumn CommandName="Delete"></telerik:GridButtonColumn>
<telerik:GridBoundColumn DataField="ID" HeaderText="ID" UniqueName="ID" ReadOnly="true"
CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" />
<telerik:GridBoundColumn DataField="Name" HeaderText="Name" UniqueName="Name"
AutoPostBackOnFilter="false" />
<telerik:GridBoundColumn DataField="Category" HeaderText="Category" UniqueName="Category" DataType="System.String"
CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" />
<telerik:GridBoundColumn DataField="Price" HeaderText="Price" UniqueName="Price"
CurrentFilterFunction="Contains" AutoPostBackOnFilter="true" DataFormatString="{0:C}" />
</Columns>
<EditFormSettings InsertCaption="Add New Item" />
</MasterTableView>
</telerik:RadGrid>
C#
private const string DataTableSessionKey = "RadGridDataTable";
private DataTable SessionDataSource
{
get
{
DataTable dt = Session[DataTableSessionKey] as DataTable;
if (dt == null || !IsPostBack)
{
// Create an empty DataTable with schema defined
dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
dt.PrimaryKey = new DataColumn[] { dt.Columns["ID"] };
Session[DataTableSessionKey] = dt;
}
return dt;
}
}
protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
(sender as RadGrid).DataSource = SessionDataSource;
}
protected void RadGrid1_InsertCommand(object sender, GridCommandEventArgs e)
{
GridEditableItem insertItem = (GridEditableItem) e.Item;
Hashtable newValues = new Hashtable();
insertItem.ExtractValues(newValues);
DataRow findLastItem = SessionDataSource.Select("ID=MAX(ID)").FirstOrDefault();
newValues["ID"] = findLastItem != null ? (int) findLastItem["ID"] + 1 : 0;
DataRow rowToInsert = SessionDataSource.NewRow();
foreach (DictionaryEntry entry in newValues)
{
rowToInsert[entry.Key.ToString()] = entry.Value ?? DBNull.Value;
}
SessionDataSource.Rows.Add(rowToInsert);
}
When a TabStrip has Keyboard navigation active, the focus CSS class (rtsFocused) is not removed from the previously active tab when clicking on other tabs with the mouse.
<telerik:RadTabStrip RenderMode="Lightweight" ID="RadTabStrip1" runat="server">
<Tabs>
<telerik:RadTab Text="Examples" />
<telerik:RadTab Text="Configurator">
<Tabs>
<telerik:RadTab Text="Default"></telerik:RadTab>
<telerik:RadTab Text="Test"></telerik:RadTab>
<telerik:RadTab Text="Final"></telerik:RadTab>
</Tabs>
</telerik:RadTab>
<telerik:RadTab Text="Quick Start" />
<telerik:RadTab Text="Help">
<Tabs>
<telerik:RadTab Text="Search"></telerik:RadTab>
<telerik:RadTab Text="Topics"></telerik:RadTab>
<telerik:RadTab Text="Troubleshooting"></telerik:RadTab>
</Tabs>
</telerik:RadTab>
<telerik:RadTab Text="Purchase" />
</Tabs>
<KeyboardNavigationSettings CommandKey="Alt" FocusKey="A" />
</telerik:RadTabStrip>
When no keyboard navigation is used, the behavior is acting correctly.
When the JAWS screen reader is used alongside the Grid with enabled keyboard navigation, using Alt + Up/Down arrow doesn't work as intended, most noticeably trying to use Alt + UpArrow doesn't move the focus to the previous row.
This behavior can be observer on the Keyboard navigation demo as well
Steps to reproduce
When the zip is opened with SecureZip, it reports 9 errors. When extracted with any zip utility, there are duplicate files in the zip. I think the files should be in folders within the zip. Attached is one such file. I've tried this several times with different base themes.
For RadGrid, after setting EnableKeyboardShortcuts to false, I find the Up/Down keys are also disabled. However, according to your online document below, the Up/Down keys shouldn't be disabled in this case.
According the Keyboard Support online demo, these buttons should not get disabled:
"The grid also features an additional property ClientSettings -> KeyboardNavigationSettings -> EnableKeyboardShortcuts which when set to false will disable all keyboard navigation shortcuts except for the Up/Down and Page Up/Page Down keys."
We would like to request updating the Azure library for uploading files to Azure Blob Storage.
The WindowsAzure.Storage library has been deprecated and is no longer maintained.
.hasChanges() results in records flagged for Delete to not actually get deleted when .saveChanges() executes.
I found the same behaviour on a LiveDemo example that checks .hasChanges(): Grid - Binding to Telerik ClientDataSource
Steps to reproduce:
Using the set_value() method of the DatePicker's Input, set "2024-05-08" (the date format is dd/MM/yyyy), the month and day are misplaced and the control gets the wrong date of 05/08/2024.
When the day is larger than 12, the correct date is received. For example, '2024-05-14' will update the control correctly and we see the control with 14/05/2024.
<%-- <dx:ASPxFormLayout ID="layout" runat="server" Width="100%" Visible="true" Theme="ios" >
<Items>
<dx:TabbedLayoutGroup Caption="tabbed group" Width="100%">
<Items>
<dx:LayoutGroup Caption="Location Information">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer1" runat="server">
<dx:ASPxFormLayout ID="ASPxFormLayout1" runat="server"
DataSourceID="datasourceThisLocation" ColumnCount="2" Theme="Aqua">
<Items>
<dx:LayoutItem FieldName="company" ColSpan="1" Caption="location">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E2"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="phone" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E3"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="fax" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E4"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="contractStatus" Caption="contract status" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E5"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="timeZone" ColSpan="1" Caption="time zone">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E6"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="primaryContact" ColSpan="1" Caption="prinary contact">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E7"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="street" ColSpan="1" Caption="address">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E10"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="street2" ColSpan="1" Caption="address">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E11"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="city" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E12"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="state" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E13"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="zip" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E14"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
<dx:LayoutItem FieldName="email" ColSpan="1">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer runat="server">
<dx:ASPxTextBox runat="server" Width="310px" ID="ASPxFormLayout1_E16"></dx:ASPxTextBox>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:ASPxFormLayout>--%>
Describe service request:
<telerik:RadTextBox ID="srevicetroubles" runat="server" Width="350px"></telerik:RadTextBox>
<%--<dx:ASPxTextBox ID="srevicetroubles" runat="server" Width="350px" Theme="Aqua" ></dx:ASPxTextBox>--%>
<telerik:RadButton ID="ASPxButton2" runat="server" Text="click here send request for service at this location"></telerik:RadButton>
<%--<dx:ASPxButton ID="ASPxButton2" runat="server" Text="click here send request for service at this location" Theme="Aqua"> </dx:ASPxButton>--%>
<asp:Label ID="Label1" runat="server" Text="" Visible="false"></asp:Label>
<%-- </dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>--%>
<%-- <dx:LayoutGroup Caption="Notes and Communication">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer3" runat="server">
<dx:ASPxGridView ID="ASPxGridView1" runat="server" DataSourceID="myStoreNotes"
EnableTheming="True" Theme="Moderno" KeyFieldName="id">
<Columns>
<dx:GridViewCommandColumn VisibleIndex="0" ShowNewButton="True" ShowUpdateButton="True" ShowClearFilterButton="True" />
<dx:GridViewDataColumn FieldName="DateAdded" Caption="Date Added" VisibleIndex="1">
<EditFormSettings VisibleIndex="1" Visible="False" />
</dx:GridViewDataColumn>
<dx:GridViewDataColumn FieldName="AddedBy" Caption="Added By" VisibleIndex="2">
<EditFormSettings VisibleIndex="2" Visible="False" />
</dx:GridViewDataColumn>
<dx:GridViewDataTextColumn FieldName="Note" Caption="Note" VisibleIndex="3">
<PropertiesTextEdit EncodeHtml="true"></PropertiesTextEdit>
</dx:GridViewDataTextColumn>
<dx:GridViewDataColumn FieldName="Ack" Caption="Acknowledged" VisibleIndex="4">
<EditFormSettings VisibleIndex="4" Visible="False" />
</dx:GridViewDataColumn>
<dx:GridViewDataColumn FieldName="ackBy" Caption="Acknowledged By" VisibleIndex="5">
<EditFormSettings VisibleIndex="5" Visible="False" />
</dx:GridViewDataColumn>
<dx:GridViewDataColumn FieldName="AckDate" Caption="Acknowledged Date" VisibleIndex="6">
<EditFormSettings VisibleIndex="6" Visible="False" />
</dx:GridViewDataColumn>
</Columns>
<Settings ShowFilterRow="True" />
<SettingsCommandButton>
<NewButton Text="Add Post-It Note" />
<UpdateButton Text="Save" />
</SettingsCommandButton>
</dx:ASPxGridView>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>
<dx:LayoutGroup Caption="Open Work Orders">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer7" runat="server">
<dx:ASPxGridView ID="ASPxGridView2" runat="server" AutoGenerateColumns="true"
Visible="true" Theme="Moderno" Width="100%"
DataSourceID="dataSourceOpenTickets" KeyFieldName ="REQUESTNUMBER">
<Columns>
<dx:GridViewDataHyperLinkColumn Caption="WO #" FieldName="REQUESTNUMBER"
VisibleIndex="10" >
<PropertiesHyperLinkEdit NavigateUrlFormatString="/orders/edit.aspx?ID={0}"
TextField="REQUESTNUMBER">
</PropertiesHyperLinkEdit>
</dx:GridViewDataHyperLinkColumn>
<dx:GridViewDataColumn Caption="Service Facility" FieldName="branch" VisibleIndex="30">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="My PO" FieldName="PO" VisibleIndex="40">
</dx:GridViewDataColumn>
<dx:GridViewDataMemoColumn Caption="Description" FieldName="DESCRIPTION" VisibleIndex="50">
</dx:GridViewDataMemoColumn>
<dx:GridViewDataColumn Caption="Type of Service" FieldName="serviceType" VisibleIndex="60">
</dx:GridViewDataColumn>
<dx:GridViewDataDateColumn Caption="Expected Completion" FieldName="ExpectedCompletionDate" VisibleIndex="80"></dx:GridViewDataDateColumn>
<dx:GridViewDataColumn Caption="Status of WO" FieldName="CurrentCustodyDisplay" VisibleIndex="90">
</dx:GridViewDataColumn>
</Columns>
<Templates>
<DetailRow>
<iframe id="myframeDetailGridView2" runat="server" scrolling="yes" marginwidth="0" marginheight="0" frameborder="0"
vspace="0" hspace="0" width="100%" height="650px" oninit="myframeDetailGridView2_Init"></iframe>
</DetailRow>
</Templates>
<Styles>
<AlternatingRow Enabled="true" />
<Header Wrap="True" />
</Styles>
<SettingsDetail ShowDetailRow="true" />
<Settings ShowFilterRow="True" ShowFilterRowMenu="true" ShowGroupPanel="True" />
<SettingsPager PageSize="15" />
<SettingsBehavior ColumnResizeMode="Control" />
<SettingsBehavior EnableRowHotTrack="true" />
</dx:ASPxGridView>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>
<dx:LayoutGroup Caption="Completed Work Oders" Visible="true">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer2" runat="server">
<dx:ASPxGridView ID="ASPxGridView3" runat="server" AutoGenerateColumns="true"
Visible="true" Theme="Moderno" Width="100%"
DataSourceID="dataSourceCompletedTickets" KeyFieldName ="REQUESTNUMBER">
<Columns>
<dx:GridViewDataHyperLinkColumn Caption="WO #" FieldName="REQUESTNUMBER"
VisibleIndex="10" >
<PropertiesHyperLinkEdit NavigateUrlFormatString="/orders/edit.aspx?ID={0}"
TextField="REQUESTNUMBER">
</PropertiesHyperLinkEdit>
</dx:GridViewDataHyperLinkColumn>
<dx:GridViewDataColumn Caption="Service Facility" FieldName="branch" VisibleIndex="30">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="My PO" FieldName="PO" VisibleIndex="40">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Description" FieldName="DESCRIPTION" VisibleIndex="50">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Type of Service" FieldName="serviceType" VisibleIndex="60">
</dx:GridViewDataColumn>
<dx:GridViewDataDateColumn Caption="Expected Completion" FieldName="ExpectedCompletionDate" VisibleIndex="80"></dx:GridViewDataDateColumn>
<dx:GridViewDataColumn Caption="Status of WO" FieldName="CurrentCustodyDisplay" VisibleIndex="90">
</dx:GridViewDataColumn>
</Columns>
<Templates>
<DetailRow>
<iframe id="myframeDetailGridView2" runat="server" scrolling="yes" marginwidth="0" marginheight="0" frameborder="0"
vspace="0" hspace="0" width="100%" height="650px" oninit="myframeDetailGridView2_Init"></iframe>
</DetailRow>
</Templates>
<Styles>
<AlternatingRow Enabled="true" />
<Header Wrap="True" />
</Styles>
<SettingsDetail ShowDetailRow="true" />
<Settings ShowFilterRow="True" ShowFilterRowMenu="true" ShowGroupPanel="True" />
<SettingsPager PageSize="15" />
<SettingsBehavior ColumnResizeMode="Control" />
<SettingsBehavior EnableRowHotTrack="true" />
</dx:ASPxGridView>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>
<dx:LayoutGroup Caption="Onsite Equipment" Visible="true">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer5" runat="server">
<dx:ASPxGridView ID="ASPxGridView5" runat="server" AutoGenerateColumns="false" Visible="true"
Theme="Office2003Blue" Width="100%" KeyFieldName="EquipmentID" DataSourceID="myEquipment">
<Columns>
<dx:GridViewDataColumn Caption="Description" FieldName="EquipmentDescription" VisibleIndex="1">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Quantity" FieldName="EquipmentQTY" VisibleIndex="2">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Type" FieldName="EquipmentType" VisibleIndex="3">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Location" FieldName="EquipmentLocation" VisibleIndex="4">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Size" FieldName="EquipmentSize" VisibleIndex="5">
</dx:GridViewDataColumn>
<dx:GridViewDataColumn Caption="Last Inspection" FieldName="LastInspection" VisibleIndex="6">
</dx:GridViewDataColumn>
</Columns>
<Templates>
<DetailRow>
<dx:ASPxGridView ID="detailGrid" runat="server" DataSourceID="equipmentdetailrecord"
Width="100%" OnBeforePerformDataSelect="detailGrid_DataSelect" AutoGenerateColumns="false">
<Templates>
<DataRow>
<table cellpadding="2" cellspacing="1" style="border-style: none; width: 100%">
<tr>
<td colspan="2">
<h1>Equipment Information</h1>
</td>
</tr>
<tr>
<td align="right">description:</td>
<td><%# Eval("EquipmentDescription")%></td>
</tr>
<tr>
<td align="right">type:</td>
<td><%# Eval("EquipmentSize")%></td>
</tr>
<tr>
<td align="right">size:</td>
<td><%# Eval("EquipmentDescription")%></td>
</tr>
<tr>
<td align="right">serial number:</td>
<td><%# Eval("SerialNumber")%></td>
</tr>
<tr>
<td align="right">location:</td>
<td><%# Eval("EquipmentLocation")%></td>
</tr>
<tr>
<td align="right">model:</td>
<td><%# Eval("EquipmentModel")%></td>
</tr>
<tr>
<td align="right">warrenty expires:</td>
<td><%# Eval("WarrentyExpires")%></td>
</tr>
<tr>
<td align="right">inspection frequency:</td>
<td><%# Eval("Freq")%></td>
</tr>
<tr>
<td align="right">last inspection:</td>
<td><%# Eval("LastInspection")%></td>
</tr>
<tr>
<td align="right">next inspection:</td>
<td><%# Eval("EquipmentDescription")%></td>
</tr>
</table>
</DataRow>
</Templates>
</dx:ASPxGridView>
</DetailRow>
</Templates>
<Settings ShowFilterRow="True" ShowFilterRowMenu="true" ShowGroupPanel="True" />
<SettingsPager PageSize="25" />
<SettingsBehavior ColumnResizeMode="Control" />
<SettingsDetail ShowDetailRow="true" ShowDetailButtons="true" />
</dx:ASPxGridView>
<p><dx:ASPxButton ID="btnXlsExport" runat="server" OnClick="btnXlsExport_Click" Theme="Office2003Blue"
Text="Export to XLS">
</dx:ASPxButton></p>
<p> </p>
<dx:ASPxGridViewExporter ID="ASPxGridViewExporter1" runat="server" GridViewID="ASPxGridView1">
</dx:ASPxGridViewExporter>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>
<dx:LayoutGroup Caption="Documents" Visible="true">
<Items>
<dx:LayoutItem Caption="" FieldName="">
<LayoutItemNestedControlCollection>
<dx:LayoutItemNestedControlContainer ID="LayoutItemNestedControlContainer4" runat="server">
<dx:ASPxGridView ID="ASPxGridView4" runat="server" Width="100%"
Theme="Moderno" DataSourceID="dsDocuments" KeyFieldName="DocID">
<Columns>
<dx:GridViewDataTextColumn Caption="Type" FieldName="DocType" VisibleIndex="40">
<EditFormSettings VisibleIndex="40" Visible="False" Caption="name:" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn Caption="WT #" FieldName="FalconServiceNumber" VisibleIndex="45">
<EditFormSettings VisibleIndex="45" Visible="False" Caption="name:" />
</dx:GridViewDataTextColumn>
<dx:GridViewDataDateColumn Caption="Index Date" FieldName="DocDate" VisibleIndex="46">
<EditFormSettings VisibleIndex="46" Visible="False" Caption="name:" />
</dx:GridViewDataDateColumn>
<dx:GridViewDataHyperLinkColumn Caption="Document" FieldName="DocID" VisibleIndex="110">
<PropertiesHyperLinkEdit NavigateUrlFormatString="javascript:ShowDetailPopup('{0}');" TextField="DocDescription">
</PropertiesHyperLinkEdit>
<EditFormSettings VisibleIndex="110" Visible="False" Caption="name:" />
</dx:GridViewDataHyperLinkColumn>
</Columns>
<Styles>
<AlternatingRow Enabled="true" />
<Header Wrap="True" />
<RowHotTrack BackColor="lightgray"></RowHotTrack>
</Styles>
<Settings ShowFilterRow="True" ShowFilterRowMenu="true" ShowGroupPanel="True" ShowFilterBar="Visible" />
<SettingsPager PageSize="20" />
<SettingsBehavior ColumnResizeMode="Control" />
</dx:ASPxGridView>
</dx:LayoutItemNestedControlContainer>
</LayoutItemNestedControlCollection>
</dx:LayoutItem>
</Items>
</dx:LayoutGroup>
</Items>
</dx:TabbedLayoutGroup>
</Items>
</dx:ASPxFormLayout>
Scenario:
1 Filter being used to filter 2 different Grids in 2 different TabStrip tabs
An unwanted second captcha is being created and the UI does not update when the second captcha is created. There are no other Ajax calls on the page that are causing this issue.
We have extended the BaseCaptchaCachingProvider and are now saving the image in the database. After making this change, the image is no longer grayed out; however, validation only succeeds after every three attempts. When we check the database, we notice that a second key with a different image has been added before the user clicks the submit. On the user interface, we still see the old image.
It would be good to add this functionality for a better customization of the Grid's newly inserted rows.