This is an existing VS2002 project using ComponentArt menu for page navigation. Currently menu items are attached to the client side event for page
validation. Upon the page submit, the control is directed to client side script for page validation. On successful page validation, the control is passed
onto server side script for saving the data.
This control is not supported in VS2012 enviornment, so we are in process of upgrading the control with RadMenu control.
Currently the ComponentArt menu control is placed inside Header page(user control) and this page is inherited in all other pages using base page concept
to render the menu.
We are having issue using RadMenu control in the same fashion.
The issue is when we associated custom client side script to RadMenu item, the control is going to custom Client side script as intended for the validation,
but after the validation it is going back to RadMenu built-in client side event (OnClientItemClicked) again for client side click rather than passing the
clontrol to RadMenu Server side click event OnItemClick="RadMenu1_ItemClick.
Issue is, if the custom client side validation fails, we want to stop there itself rather going back to built-in client side for further validation.
Is it possible to stop the control going to radMenu built-in validation, if the custom client side validation fails ?
3 Answers, 1 is accepted
I am glad to hear that you decided to use our RadMenu control in your application.
As far as I understand you are trying to stop firing the the RadMenu client-side event ClientItemClicked and the server-side event ItemClick. An easy and convenient way of achieving such scenario would be to use the RadMenu ClientItemClicking event handler for implementing your custom client validation. If it fails you can simply cancel any further execution so the client-side click and server-side click events will not be fired. I have attached a sample web site project that contains the RadMenu in user control and a page that includes this user control. The console log messages shows in what sequence the events are processed. In order to review the log you can open the console tab of your browser's developer tools.
If this is not exact functionality you want to achieve, please explain which events you want to prevent if your custom client-side validation fails. A sample scenario that illustrates your case will be very helpful.
Please refer to our RadMenu client-side programming section and specifically to our RadMenu client-side events help article for more information.
Regards,
Boyan Dimitrov
Telerik
Assume I have Page1.aspx,Page2.aspx,Page3.aspx,
I created a a user control ie. Header Page (System.Web.UI.UserControl) , where I put a radMenu.
I added this user control (Header Page) in Page1,Page2 and Page3.
In the page Load of the UserControl ,I am adding MenuItems as follows.
Note :clsNavigationState object value will be assigned from Page1,Page2,Page3 etc..
Take the example of btnClear, I am attching a JavaScript function On_Clear() using objMenuButton.AttributesValue.
objMenuItem.Attributes.Add("onclick", "return " + objMenuButton.AttributesValue + "")
Assume Page1 has 10 TextBoxes , Page2 has 5 Dropdowns and Page3 has 12 TextBoxes .
***Scenario 1 - I have Submit and Clear Buttons***
When I click ClearButton On Page1 , it should clear 10 TextBoxes in Page1 and stop the execution there.
***Scenario 2 - I have Submit and Clear Buttons***
When I Click Submit Button On Page1 , it should validate 10 TextBoxes in Page1 .if validation fails stop the execution there
else continue and PostBack the Page
QUESTION IS How do I notify the ClientItemClicking event to Proceed or Not from the above Scenario.
//Page1function On_Clear(){txt1.value = "";txt2.value = "";...txt10.value = "";return false;}//Page2function On_Clear(){drp1.Clear();drp2.Clear();...drp3.Clear();return false;}Private Function addMenuItemRad(ByVal objMenuButton As clsMenuButton) As Web.UI.RadMenuItem Try Dim objMenuItem As New Web.UI.RadMenuItem objMenuItem.Value = Replace(objMenuButton.text, " ", "") objMenuItem.Text = objMenuButton.text objMenuItem.Enabled = objMenuButton.enabled objMenuItem.Visible = objMenuButton.visible objMenuItem.Attributes.Add("onclick", "return " + objMenuButton.AttributesValue + "") '09/29/05 Return objMenuItem Catch ex As Exception m_oErrHandler.SendHtmlErrorEmail(ex, False) Throw ex End Try End Function Public Sub ShowTransactionButtons(ByVal objNavigationState As clsNavigationState) Try mnuTransactionRad.Items.Clear() If objNavigationState.btnNew.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnNew)) End If If objNavigationState.btnInsert.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnInsert)) End If If objNavigationState.btnUpdate.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnUpdate)) End If If objNavigationState.btnCopy.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnCopy)) End If If objNavigationState.btnDelete.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnDelete)) End If If objNavigationState.btnPrint.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnPrint)) End If If objNavigationState.btnProcess.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnProcess)) End If If objNavigationState.btnRefresh.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnRefresh)) End If If objNavigationState.btnSubmit.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnSubmit)) End If If objNavigationState.btnClear.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnClear)) End If If objNavigationState.btnCancel.visible Then mnuTransactionRad.Items.Add(addMenuItemRad(objNavigationState.btnCancel)) End If mnuTransaction.ApplyLooks() Catch ex As Exception m_oErrHandler.SendHtmlErrorEmail(ex, False) Throw ex End Try End SubPublic Class clsMenuButton ''''''''''''''''''''''''''''''''''''''''' '*** Transaction Buttons ****(STARTS)**** ''''''''''''''''''''''''''''''''''''''''' Private m_Text As String Private m_Enabled As Boolean Private m_Visible As Boolean Private m_AttributesValue As String Public Property text() As String Get Return m_Text End Get Set(ByVal Value As String) m_Text = Value End Set End Property Public Property enabled() As Boolean Get Return m_Enabled End Get Set(ByVal Value As Boolean) m_Enabled = Value End Set End Property Public Property visible() As Boolean Get Return m_Visible End Get Set(ByVal Value As Boolean) m_Visible = Value End Set End Property Public Property AttributesValue() As String Get Return m_AttributesValue End Get Set(ByVal Value As String) m_AttributesValue = Value End Set End Property ''''''''''''''''''''''''''''''''''''''''' '*** Transaction Buttons ****(ENDS)****** '''''''''''''''''''''''''''''''''''''''''End ClassPublic Class clsNavigationState ''''''''''''''''''''''''''''''''''''''''' '*** Transaction Buttons **************** ''''''''''''''''''''''''''''''''''''''''' Private m_strTransactionState As String Private m_btnNew As New clsMenuButton Private m_btnInsert As New clsMenuButton Private m_btnUpdate As New clsMenuButton Private m_btnCopy As New clsMenuButton Private m_btnDelete As New clsMenuButton Private m_btnCancel As New clsMenuButton Private m_btnClear As New clsMenuButton Private m_btnRefresh As New clsMenuButton Private m_btnPrint As New clsMenuButton Private m_btnProcess As New clsMenuButton Private m_btnSubmit As New clsMenuButton Private m_strUserName As String Public Sub setDefaultTransactionButtons() btnNew.text = "New" btnInsert.text = "Insert" btnUpdate.text = "Update" btnCopy.text = "Copy" btnDelete.text = "Delete" btnCancel.text = "Cancel" btnClear.text = "Clear" btnRefresh.text = "Refresh" btnPrint.text = "Print" btnProcess.text = "Process" btnSubmit.text = "Submit" btnCreateWMSJob.text = "Create WMS Job" btnNew.enabled = False btnInsert.enabled = False btnUpdate.enabled = False btnCopy.enabled = False btnDelete.enabled = False btnCancel.enabled = False btnClear.enabled = False btnRefresh.enabled = False btnPrint.enabled = False btnProcess.enabled = False btnSubmit.enabled = False btnCreateWMSJob.enabled = False btnNew.visible = False btnInsert.visible = False btnUpdate.visible = False btnCopy.visible = False btnDelete.visible = False btnCancel.visible = False btnClear.visible = False btnRefresh.visible = False btnPrint.visible = False btnProcess.visible = False btnSubmit.visible = False btnCreateWMSJob.visible = False End Sub Public Property btnNew() As clsMenuButton Get Return m_btnNew End Get Set(ByVal Value As clsMenuButton) m_btnNew = Value End Set End Property Public Property btnInsert() As clsMenuButton Get Return m_btnInsert End Get Set(ByVal Value As clsMenuButton) m_btnInsert = Value End Set End Property Public Property btnUpdate() As clsMenuButton Get Return m_btnUpdate End Get Set(ByVal Value As clsMenuButton) m_btnUpdate = Value End Set End Property Public Property btnCopy() As clsMenuButton Get Return m_btnCopy End Get Set(ByVal Value As clsMenuButton) m_btnCopy = Value End Set End Property Public Property btnDelete() As clsMenuButton Get Return m_btnDelete End Get Set(ByVal Value As clsMenuButton) m_btnDelete = Value End Set End Property Public Property btnCancel() As clsMenuButton Get Return m_btnCancel End Get Set(ByVal Value As clsMenuButton) m_btnCancel = Value End Set End Property Public Property btnClear() As clsMenuButton Get Return m_btnClear End Get Set(ByVal Value As clsMenuButton) m_btnClear = Value End Set End Property Public Property btnRefresh() As clsMenuButton Get Return m_btnRefresh End Get Set(ByVal Value As clsMenuButton) m_btnRefresh = Value End Set End Property ''''''''''''''''''''''''''''''''''''''''' '*** Transaction Buttons ****(ENDS)****** '''''''''''''''''''''''''''''''''''''''''End ClassPlease find attached a sample project that contains a user control "HeaderUserControlVB" and two aspx pages. In both pages the user control is included. The main difference comes in the code behind:
- In the page load event handler you can find the RadMenu control using the user control as shown in the attached sample. Then you can create different items for the specific page using your method "addMenuItemRad". I would suggest attaching the RadMenu OnClientItemClicking client-side event handler from the code behind and create a function with the same name in the markup code. This way you can implement a custom logic to be executed when a menu item is clicked based on the current page- if this is Page1.aspx you will clear the text boxes and if this is Page2.aspx you can clear the drop down lists. In the comments you can find out how you can get the clicked menu item clicked item and perform different logic based on the fact which menu item is clicked - for example the clear or the new button.
Regards,
Boyan Dimitrov
Telerik