Wednesday, March 28, 2012

Accordian

Hi guys

can anyone tell me how to use accordians from the ajax toolkit ?

Thanks

Hi,

go therehttp://www.asp.net/learn/ajax-videos/video-87.aspx and watch the movie or download the code (vb or c#)

Hope it helps

Regards

-----------------------------

Please do not forget to mark as answered. Thanks

Accordeon wont work - please help a newby

Hello,

I am new to Atlas and trying to use accordeon extension from the toolkit. I have installed the toolkit and AjaxControlExtender, then created a web site with ajax-toolkit template and added accordeon control from toolbox to the Default.aspx

I get a few error messages:

Error 1 Type 'AjaxControlToolkit.Accordion' does not have a public property named 'AccordionPane'. c:\inetpub\wwwroot\eBible-ajax\Default.aspx 13
Error 2 Type 'AjaxControlToolkit.Accordion' does not have a public property named 'AccordionPane'. c:\inetpub\wwwroot\eBible-ajax\Default.aspx 16
Error 3 Content ('</ajaxToolkit:AccordionPane> </ajaxToolkit:AccordionPane>') does not match any properties within a 'AjaxControlToolkit.Accordion', make sure it is well-formed. c:\inetpub\wwwroot\eBible-ajax\Default.aspx 16
Error 4 Accordion1:Type 'AjaxControlToolkit.Accordion' does not have a public property named 'AccordionPane'. c:\inetpub\wwwroot\eBible-ajax\Default.aspx http://localhost:8080/eBible-ajax/

I guess I am missing something, possibly a very simple thing that is well knows to you guys but not yet to me. Below is how the pages' code looks. Thanks for help!

<%@dotnet.itags.org. Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <ajaxToolkit:Accordion ID="Accordion1" runat="server" Width="250px"> <ajaxToolkit:AccordionPane ID="AccordionPane1" runat="server" ContentCssClass="" HeaderCssClass=""> </ajaxToolkit:AccordionPane> <ajaxToolkit:AccordionPane ID="AccordionPane2" runat="server" ContentCssClass="" HeaderCssClass=""> </ajaxToolkit:AccordionPane> </ajaxToolkit:Accordion> </div> </form> </body></html>
Hi,


Sorry about that .

We dont see the @.Register tag in your page to register the AjaxControlToolkit process.

Can you add this line after the @.Page tag ?

<%@. Register Assembly="AjaxControlToolkit, Version=1.0.10123.0, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

nope, doesn't help - same errors

it should be like this i believe

<ajaxToolkit:Accordion>

<Panes>

// panes in here

</Panes>

</ajaxToolkit:Accordion>



Figured this out, too. The Panes tag is not added for some reason when you add panes from properties box (panes -> collection -> add). Weird.

Thanks anyway.


Hi there,

you should check out the introductory video on this site

http://www.asp.net/learn/videos/view.aspx?tabid=63&id=87

cheers!

Accessing Wizard controls from client-side Javascript

Hello, all. Thank you in advance for taking the time to read this. I know it is of questionable relevance given that the Wizard control is not an AJAX toolbox component, but since the Wizard is more useless without AJAX, I am hoping it is close enough to topic.

I am dealing with a Viewstate issue that is forcing me to use ScriptingServices for most of my async communications in order to keep round-trip bandwidth manageable. I want to be able to validate entries made on a long wizard both on-the-fly and at-once. But using ScriptServices, I need to access the values in the Wizard controls from client-side.

Trouble is, I have found that the wizard controls and their values are only visible to the DOM if the wizard page is active. Elements on non-active pages are totally inaccessible from client-side.

For example, a textbox with ID=TextBox1 is on page 1 of the wizard control ID=Wizard1; ID=TextBox2 is on page 2 of Wizard1

when Wizard1.ActiveStepIndex equates to page 1, then $get("TextBox1") works, but $get("TextBox2") does not.

I am assuming that there is some object reference to Wizard1 that can be used client-side to get the values from control on non-active pages, but I just can't seem to find it.

If anyone has experience with this and can tell me how to access these values, I would be highly appreciative.

Thank you again for the time, and in advance for any information you can provide.

Hi,

That's because only content of active step will be rendered. Though, all of them will be encoded and saved in ViewState.

My suggestion is use hiddenFields out of the wizard to keep the value of different steps, and they will be always generated and persisted.


Thanks again for your time and thoughts. That's exactly how I have decided to handle it. It sure adds a lot of complication to what seemed like a pretty easy control. Add to it that I am replacing long dropdown lists with static values after a selection has been made to trim the viewstate, and I think it would have been easier to start from scratch.

The hidden fields work great -- very good idea.

Thanks again!

Accessing webservice over HTTPS with ajax

hey everyone, just an easy lil question to start me off into the world of ajax and web services :D

i have created a webservice that is located athttps://active.innerstruct.com/ausclans/webservices/ausclans.asmx

i've included it in the ScriptManager Services tag

but i'm still getting errors :(

do i have to create a web reference like the standard web services?

What is the exception?


FYI Cross Domain call is not allowed. The Web Service must exist in the same virtual directory/site.

Accessing Web Services that are external to my application.

Is it possible to use the <atlas:servicereference> to set a path to a web service that doesn't exist within the same application as the consuming aspx file?

All the samples and examples show the <atlas:servicereference path="" /> containing the path to an asmx file located within the same application as the consuming aspx file. How would I set a reference tohttp://somedomain/someapp/someservice.asmx ?

This can't easily be done because XmlHttp (the browser component used to make requests) disallow requests to other domain for security reasons. Note that youcan make requests to Atlas services in other apps, as long as they're in the samedomain. e.g. foo.mydomain.com can use bar.mydomain.com.

In the next build of Atlas (around march), we will allow a limited form of cross domain method calls to Atlas services (without using XmlHttp).


Thanks. I can just reference the external web services from with the one local to my application.
Yes, doing this is what we call 'bridging', and we will also have addition support for this is a later build. In the meantime, do whatever gets you going! :-)

Accessing variables from OnComplete

Hello guys, we've been trying to convert our web app to Atlas from AJAX.NET and ran into a bit of a problem with the way our AJAX calls are structured.

Take, for example, this hypothetical function:

function getAlbumName(aID)
{
PlanetEye.GTTS.AjaxService.getAlbumName(aID, OnComplete)
}
function OnComplete(result)
{
document.getElementById("albumDiv").innerHTML =result;
}
Now, my question is: Is there a way to access the aID variable from within the OnComplete function? For example, if I want the innerHTML to read something like -"id: "+aID+" name:"+result

Back when we were using AJAX.NET we avoided the call back function all together so that we could just say:albumName =PlanetEye.GTTS.AjaxService.getAlbumName(aID);and continue on with the getAlbumName function, but i dont' think that's possible with Atlas, is it?

Thanks for any help, or pointers in the right direction Smile [:)]

Yep, you can use the userContext parameter which gets passed into the OnComplete callback, there's a few ways to specify the userContext, its probably best for me to just point you at the docs,

http://atlas.asp.net/docs/atlas/doc/services/consuming.aspx#alt

I believe your OnComplete will need to look like this once you update the call:

OnComplete(result, response, userContext)...

And you would just need to pass your aID as your userContext...

Hope that helps,
-Hao


HaoK:

Yep, you can use the userContext parameter which gets passed into the OnComplete callback, there's a few ways to specify the userContext, its probably best for me to just point you at the docs,

http://atlas.asp.net/docs/atlas/doc/services/consuming.aspx#alt

I believe your OnComplete will need to look like this once you update the call:

OnComplete(result, response, userContext)...

And you would just need to pass your aID as your userContext...

Hope that helps,
-Hao

This part motivated me to research a bit more about this in the search for the solution my needs. I was used to AJAX.NET in the way that I were able to get a result without having to write a callback function. For example (pseudo code):

1// Function called from any button2function PerformTasks(controlid, 2ndParam)3{4 // Ajax call5 res = AjaxMethods.GetResults(2ndParam);67 // Do the stuff needed8 document.getElementById(controlid).innerHtml = res.value;910 // Other logic11}

Using new WebMethod logic we need to pass parameters to the OnComplete function. We can do this using one value ou several becauseuserContext can be any JavaScript primitive type, array, or object. So consider this:

1// My example function called from an OnCLick event2function CommentFile(sFilename, drpClientID)3{4var arrUserContext = new Array();5arrUserContext[0] = sFilename;6arrUserContext[1] = drpClientID;78EntitiesService.GetFileNotes(sFilename, OnCommentFile, OnCommentFailure, arrUserContext);91011}1213// The OnComplete function14function OnCommentFile(arg, arrUserContext)15{16var sFilename = arrUserContext[0];17var drpClientID = arrUserContext[1];1819drpTmp = document.getElementById(drpClientID);20drpRevisionValue = drpTmp.options[drpTmp.selectedIndex].value;2122alert(arg);2324// all the logic from here, we can use the return arg and the param(s) from the source function that is triggered from any link, etc.2526}2728// The OnFailure function29function OnCommentFailure()30{31// Empty32}
My problems are solved with this solution.

Accessing values from dynamically created controls

Hi. I'm writing a web application that uses Atlas todynamically create controls in a specific section of a web page. I have 2 update panels. One of them contains a DropDownList. The other one will contain thedynamically created controls. The controls are created in the SelectedIndexChanged event of the DropDownList, and I coded that in the server side. All those controls are arranged in a table server control, which is also created in the SelectedIndexChanged event. The page also has a Button server control that will allow me to start processing the values entered by the user in the created controls. Of course this processing will be done in the server side. This button is not part of either update panel.

Now, the problem is that when I try to get the values of the controls in the Button Click server event, using the table.FindControl() function, I see that the table itself is null, so I cannot access any control value. I think the problem has to do with the fact that the table and its controls are created in the update panel, and for some reason everything created there is not available for my Button Click server event.

How can I solve this scenario?

Thanks,

Julio

Modifying the controls colletion during a postback is generally not a good idea in ASP.NET. Additionally, dynamically added controls will not persist through viewstate so you'll have to re-create and add them to the container on each postback.

Instead of adding/removing controls, I suggest you use the "Visible" property of the control. You can set the control.Visible=false, which will prevent it from rendering down to the client.

Hope this helps,

-Tony


Thanks a lot Tony. The problem is that the user can choose 25 different elements in my combobox, and each element will require to create/show from 1 to 20 new controls on the dynamic section of the page. So if I take your advise and just put all possible controls on the page on design view, hidding or showing them asappropriate, wouldn't it be too much overhead for my page?

Julio


Julio,

Any way you choose is going to require quite a bit of code on your end to determine when to show/hide or create/destroy controls. You are correct in that should you choose to instantiate all controls on the page load, it will indeed add extra overhead.

To acheive the results you are looking for, you'll need to test for which item is selected, and fill the update panel accordingly. The earlier this happens in the page lifecycle the better off you are. The one problem you might encounter is that replacing a control on the fly like this, could cause viewstate errors since the control which saved its viewstate in the previous response, has now been replaced with a completely different control.

We've actually built the behavior you're looking for directly into the Infragistics WebTab. It provides LoadOnDemand behavior though an AJAX mechanism. Using a Tab Interface also speeds up the development since you can separate your content into individual tabs, displaying only the relevant tab. In most cases the performance overhead incurred is well worth the development time saved. Of course, you'd need to make that call based on your own project requirements.

Hope this helps,
-Tony


Hi Tony. You are completely right. I have just found that viewstate error you mention. I have tried to control that error, but I just keep getting errors when adding/removing controls. I would like to try using Infragistics WebTab, as our company has full licenses for the NetAdvantage suite. Could you please show me a small example of how could I achieve this behavior with the WebTab and the LoadOnDemand behavior? Or maybe give me a link to an example? I would reallyappreciate it.

Thanks a lot for your help,

Julio


Hi Julio,

You'll need to getNetAdvantage 2006 Volume 2 if you don't already have it. On the WebTab, set AsyncMode=On, and AsyncOptions.EnableLoadOnDemand=True. Next, using the interactive design surface, simply drag and drop your content into the desired Tab pane. You can even switch between tabs by clicking the desired tab on the design-surface. The WebTab has UpdatePanel-like behavior built directly into it, so postbacks will automatically be turned into AJAX callbacks. The LoadOnDemand behavior will also enable the initial page load to contain only the content for the selected tab, all other tab content will be dynamically retrieved as necessary.

Hope this helps,
-Tony


Hi Tony. It seems likeUltraWebTabAJAX features won't help me. Theasync behavior I'm looking for starts outside the tab control, but not in the tabs itself. My UltraWebTab has 25 tabs inside it. I also have a dropdownlist which is outside my UltraWebTab. Now, without any AJAX behavior, what my page does is that, when you select an element in the dropdownlist I hide all the tabs except for the one that is related to the selected value on the dropdownlist. This of course causes a full roundtrip to the server.

So, what I'd like to happen is that, when I change my selection on the dropdownlist, all the not related tabs just become invisible, but with no roundtrip. I enabled all the async options you mentioned, but I thing they are mostly targeted for the scenarios where the user navigates between tabs, and no with my particular scenario. So I just thought I could solve this by adding an Atlas UpdatePanel and putting the UltraWebTab inside it. I also added a trigger to the panel so that any time the dropdownlist change its value, the updatePanel would update its contents.

Here is the code for my DropDownList:

<table>

<tr>

<tdstyle="width: 3px"valign="top">

<asp:DropDownListID="MyDropDownList"runat="server"AutoPostBack="True"DataSourceID="MyDataSource"DataTextField="Description"DataValueField="Id"></asp:DropDownList><asp:ObjectDataSourceID="MyDataSource"runat="server"SelectMethod="GetMyItems"TypeName="MyProduct.MyClass"></asp:ObjectDataSource></td>

</tr>

</table>

...And this is the code for the UltraWebTab and the UpdatePanel:

<table>

<tr><tdstyle="width: 239px; height: 101%;"valign="top"><atlas:UpdatePanelID="Up1"runat="server"Mode="conditional"><ContentTemplate><igtab:UltraWebTabID="MyUltraWebTab"runat="server"BorderColor="#949878"BorderStyle="Solid"BorderWidth="1px"ThreeDEffect="False"SelectedTab="16"AsyncMode="On"><DefaultTabStyleBackColor="#FEFCFD"Font-Names="Microsoft Sans Serif"Font-Size="8pt"ForeColor="Black"Height="22px"><PaddingTop="2px"/></DefaultTabStyle><Tabs>

<!--Here comes my Tabs and controls -->

</Tabs><RoundedImageFillStyle="LeftMergedWithCenter"HoverImage="[ig_tab_winXP2.gif]"LeftSideWidth="7"NormalImage="[ig_tab_winXP3.gif]"RightSideWidth="6"SelectedImage="[ig_tab_winXP1.gif]"ShiftOfImages="2"/><SelectedTabStyle><PaddingBottom="2px"/></SelectedTabStyle><BorderDetailsColorBottom="90, 120, 160"ColorRight="90, 120, 160"/><AsyncOptionsEnableLoadOnDemand="True"/></igtab:UltraWebTab></ContentTemplate><Triggers><atlas:ControlValueTriggerControlID="MyDropDownList"PropertyName="SelectedValue"/></Triggers></atlas:UpdatePanel></td>

</tr>

But now I'm just getting an "Unknown Error" popup window every time I change my selection in the dropdownlist. It seems like any combination of UltraWebTab and UpdatePanel just does not work. I have already written Atlas apps with my current installation (June CTP) and they work fine until I add an UltraWebTab. All Atlas configurations in the web.config and the script manager are on place, so it should work.

Is there a known compability issue between UltraWebTab and UpdatePanel? If it is, is there any way I could achieve my desired behavior with UltraWebTab async and loadOnDemand options?

Thanks a lot,

Julio


Hi Julio,

You should contact Infragistics Developer Support and provide them the details above. A hotfix was made available on Friday, July 28th which may address this issue.

-Tony