使用非基本对象为DropDownListFor实现Equals

时间:2013-09-05 18:21:34

标签: c# asp.net asp.net-mvc-4 razor dropdownlistfor

我有一个对象Modem,其属性Protocol绑定到DropDownListFor。未选择DropDownList中的调制解调器值。

public class Modem {

   public Protocol Protocol { get; set; }

}

public class Protocol {
    public string Name { get; set; }
    public string Value { get; set; }
}

我的控制器代码

var modem = new Modem{ Protocol = new Protocol { Name = "UDP", Value = "The udp protocol" } };
var protocols = new List<Protocol>{ new Protocol { Name = "TCP", Value = "The tcp protocol" }, new Protocol { Name = "UDP", Value = "The udp protocol" } };
ViewBag.Protocols = protocols.Select(p => new SelectListItem{ Value = p.Name, Text = p.Value });

return View(modem);

我的观看代码

@Html.DropDownListFor(modem => modem.Protocol, (IEnumerable<SelectListItem>) ViewBag.Protocols)

如果我手动设置不起作用的所选协议。我可以像这样实现Equals(已尝试使用Protocol执行此操作,但它无效...)

public bool Equals(object obj){
    if(obj == null){
        return false;
    }
    var protocol = obj as Protocol;
    return protocol != null && protocol.Name == Name;
}

更新 我尝试使用

@Html.DropDownListFor(modem => modem.Protocol, new SelectList(ViewBag.Protocols, "Name", "Value", Model.Protocol))

但也没有奏效:(。

更新2: 使用反射器,我发现了这一行:

HashSet<string> set = new HashSet<string>(from value in enumerable.Cast<object>() select Convert.ToString(value, CultureInfo.CurrentCulture), StringComparer.OrdinalIgnoreCase);

所以DropDownListFor使用ToString方法来设置默认值。 使用这种ToString方法,我可以做我想做的事情:

public override string ToString()
{
    return Name;
}

0 个答案:

没有答案