To Bind Enum value in Drop Down use the following
CSHTML
To display list of enum and select the value
@Html.EnumDropDownList(model => model.State,
new { Id = "ddlState" })
To display list of enum item and keep binding when save/modify
@Html.EnumDropDownListFor(model =>
model.StateSelected, Model.State, new { Id = "ddlState" })
Note: model.StateSelected is int value.
Model
private int _StateSelected = 1;
public int StateSelected
{
  get { return _StateSelected; }
  set { _StateSelected = value; }
}
private State _State = 1;
public State State 
{
  get { return _State; }
  set { _State= value; }
}
Note: State is enum
public enum State
        { 
            Tamilnadu =1,
            Karnadaka,
            ..
        }
Helper Class
  /// <summary>
        /// Enums the drop down list for.
        /// </summary>
        /// <typeparam
name="TModel">The type of the
model.</typeparam>
        /// <typeparam
name="TEnum">The type of the enum.</typeparam>
        /// <param
name="htmlHelper">The HTML helper.</param>
        /// <param
name="expression">The expression.</param>
        /// <param
name="htmlAttributes">The HTML
attributes.</param>
        /// <returns></returns>
        public static MvcHtmlString EnumDropDownList<TModel, TEnum>(this HtmlHelper<TModel>
htmlHelper, Expression<Func<TModel, TEnum>> expression, object htmlAttributes = null)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            Type enumType = GetNonNullableModelType(metadata);
            Type baseEnumType = Enum.GetUnderlyingType(enumType);
            IEnumerable<SelectListItem> items = from value in enumType.GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)
                                               
select new SelectListItem()
                                               
{
                                                   
Text = GetEnumDisplayValue(value),
                                                    Value = Convert.ChangeType(value.GetValue(null), baseEnumType).ToString(),
                                                   
Selected = (value.GetValue(null).Equals(metadata.Model))
                                                };
            return SelectExtensions.DropDownList(htmlHelper, "EnumDropDown", items, htmlAttributes);
        }
        /// <summary>
        /// Enums the drop down list for.
        /// </summary>
        /// <typeparam
name="TModel">The type of the
model.</typeparam>
        /// <typeparam
name="TEnum">The type of the enum.</typeparam>
        /// <typeparam
name="TProperty">The type of the
property.</typeparam>
        /// <param
name="htmlHelper">The HTML helper.</param>
        /// <param
name="expression">The expression.</param>
        /// <param
name="enumType">Type of the enum.</param>
        /// <param
name="htmlAttributes">The HTML
attributes.</param>
        /// <returns></returns>
        public static MvcHtmlString EnumDropDownListFor<TModel, TEnum, TProperty>(this HtmlHelper<TModel>
htmlHelper, Expression<Func<TModel, TEnum>> expression, TProperty enumType, object htmlAttributes = null)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            Type baseEnumType = Enum.GetUnderlyingType(typeof(TProperty));
            IEnumerable<SelectListItem> items = from value in typeof(TProperty).GetFields(BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public)
                                               
select new SelectListItem()
                                               
{
                                                   
Text = GetEnumDisplayValue(value),
                                                   
Value = Convert.ChangeType(value.GetValue(null), baseEnumType).ToString(),
                                                   
Selected = (value.GetValue(null).Equals(metadata.Model))
                                                };
            return SelectExtensions.DropDownListFor(htmlHelper, expression, items,
htmlAttributes);
        }
        /// Gets the enum display value.
        /// </summary>
        /// <param
name="field">The field.</param>
        /// <returns></returns>
        private static string GetEnumDisplayValue(FieldInfo field)
        {
            string text;
            DescriptionAttribute[] attributes =
           (DescriptionAttribute[])field.GetCustomAttributes(
           typeof(DescriptionAttribute),
           false);
            if (attributes != null &&
                attributes.Length > 0)
            {
                text =
attributes[0].Description;
            }
            else
            {
                text = field.Name;
            }
            return text;
        }
        /// <summary>
        /// Gets the type of the non nullable model.
        /// </summary>
        /// <param
name="modelMetadata">The
model metadata.</param>
        /// <returns></returns>
        private static Type GetNonNullableModelType(ModelMetadata modelMetadata)
        {
            Type realModelType = modelMetadata.ModelType;
            Type underlyingType = Nullable.GetUnderlyingType(realModelType);
            if (underlyingType != null)
            {
                realModelType = underlyingType;
            }
            return realModelType;
        }
 
