What Mark wrote in his answer is absolutely correct. Sitecore does not mechanisms to execute conditional rendering personalization without executing a request.
But there is always some space for workarounds (or hacks, however we call it).
What you could do is an ajax call back to Sitecore with the same url as the page. When you receive html back from server, replace the content of <body>
with the new <body>
from the server. But there are already 2 issues with that:
We don't want to track 1 extra page visit - I don't know if Sitecore ignores ajax call by default. If not, you would need to write a custom processor that would make sure that ajax requests are not tracked.
All the user interactions with page (like your dropdown selection) are lost.
To work around the 2nd issue, you could think about adding some markers around the components which you want to update with their new versions from the server, like:
<!-- START: UNIQUE ID OF A RENDERING IN PRESENTATION DETAILS -->
<html of the component>
<!-- END: UNIQUE ID OF A RENDERING IN PRESENTATION DETAILS -->
And after the ajax response comes back from the server, only replace bits between the markers (or remove parts of the html if the markers are not present in the new ajax response).
With all of that said, you need to remember you're working around Sitecore mechanisms and it's possible it won't work in some cases and every upgrade of Sitecore version may have impact on your solution.
Now it's your decision, if the requirement to update bits of the page using personalization options is so important that you cannot do a full page reload and maybe if those conditions even should be handled by personalization.