The data was being refreshed on postback, so the original value (which is blank) was being submitted. Adding a postback check solved the problem.
if (!Page.IsPostBack){ RefreshData()}