MVC3: Bind Enum To DropDownList ?

0. 准备测试数据

0.1 : 枚举

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication.Models
{
    public enum YesOrNo
    {
        否 = 0,
        是 = 1
    }
}

0.2 : 对应实体类及表sql

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MvcApplication.Models
{
    public class Test
    {
        [Key]
        public int Id { get; set; }

        [Display(Name = "状态")]
        [Required(ErrorMessage = "状态不能为空.")]
        public int Status { get; set; }
    }
}

/*
-- 对应SQL
 CREATE TABLE Test(
	Id INT PRIMARY KEY IDENTITY(1,1),
	[Status] INT
)
go
INSERT INTO Test VALUES(1)
 */

0.3 在Controller 文件夹上生成强类型(Test)的读写控制器及视图. (自动生成这些,我们的测试工作就很轻松了)


1.  写一个扩展方法,放在静态的工具类中。

/// <summary>
/// 将枚举转换到Select的扩展方法
/// </summary>
/// <typeparam name="TEnum">枚举类型</typeparam>
/// <param name="enumObj">枚举对象</param>
/// <returns>SelectList</returns>
public static SelectList ToSelectList<TEnum>(this TEnum enumObj)
{
    var values = from TEnum e in Enum.GetValues(typeof(TEnum))
                    select new { Id = Convert.ToInt32(e), Name = e.ToString() };

    return new SelectList(values, "Id", "Name", Convert.ToInt32(enumObj));
}


2. 改写Action

//
// GET: /Test/Edit/1
 
public ActionResult Edit(int id)
{
    Test test = db.Test.Find(id);
    ViewBag.list = ((YesOrNo)test.Status).ToSelectList();
    //ViewData["status"] = ((YesOrNo)test.Status).ToSelectList();  //不可以的
    return View(test);
}

3. 改写View 中的Edit.cshtml

@Html.DropDownListFor(model=> model.Status, ViewBag.list as SelectList )

4. 运行 /Test/Edit/1  看看效果吧。



在这个引用中,出现了一个警告信息:“Could not create server TCP listening socket *:6379: bind: Address already in use” 。这个警告意味着无法创建Redis服务器的TCP监听套接字,因为端口6379已经被占用。在另一个引用中,提到了在Redis的不同版本中,关于bind配置的处理方式不同。在旧版本中,注释掉bind配置后,默认会绑定到0.0.0.0地址,也就是监听所有可用的网络接口。而在新版本中,同样的配置可以正常启动,这是因为在代码中有对IPv6的处理,如果本机没有开启IPv6,就会继续连接IPv4。如果都无法连接成功,就会打印日志并退出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis端口占用 Could not create server TCP listening socket *:6379: bind: Address already in use](https://blog.csdn.net/qq_43833393/article/details/127889619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [解决 Redis 启动 Creating Server TCP listening socket *:6379: unable to bind socket](https://blog.csdn.net/molaifeng/article/details/131948839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值