Assuming the value of the dropdownlist is the ID of the lookup item
SPFieldLookupValue value = new SPFieldLookupValue(id, id.ToString());
item["field_name"] = value.ToString();
You also have a few thing that need corrected with your code. First, is there a reason to use RunWithElevatedPrivledges? It should not be used casually. If the user doesn't have the permissions to create a listitem then should they even have access to the functionality? If you do need to use RunWithElevatedPrivledges then the SPWeb object should be obtained within its context. As you have it, the SPWeb object is obtained using the context for the current user making the use of RunWithElevatedPrivledges irrelevant.
You set web.AllowUnsafeUpdates = true; but never return it to false. True the next time a SPWeb.Invalidate() call is made it will revert back to false. However, in the mean time you have exposed a security hole to your environment. Since you are running with elevated privileges setting AllowUnsafeUpdates isn't even necessary.
You are also using OpenWeb() to get the SPWeb object which by default will use the rootweb. You should use the the SPSite.RootWeb property instead. This uses fewer resources and doesn't need to be disposed of.
You should be using defensive coding and check if the lists are valid, or handle exceptions if not, before using them. You have no control over whether the lists have been removed or renamed, anyone with sufficient privileges can do so via the UI without you knowing about it. If you are using 2010 use the SPWeb.TryGetList method.
And of course all of this should be placed in a defined data and/or business layer not directing in the UI.