About
It seems to me that in general, if I have an async event (lets say for a button click) and I change properties of another component I would often have to call RenderAsync. Otherwise, how would the button click event know which other controls to re-render? Is that correct? i.e. if I use a button click to populate the items in a listbox or something
You must use only RenderAsync or AjaxReRender = RenderAsync(...,Self)
When
What happens sometimes is that:
Javascript is not generated because the operations are too complex, that's why render async is a good thing, because it renders the html of a region and its children and then uses javascript to add/replace the html to the current page.
for some jquery plugins the javascript is generated, and the plugin had a general setter method, but it doesn't do anything for a given property (is the case of jqgrid column's width).
So the rule is: only user RenderAsync when strictly necessary, ie, if the code you add in an async event its not reflected in the browser.