我有一个对象Modem
,其属性Protocol
绑定到DropDownListFor
. DropDownList 中 Modem 的值没有被选中。
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;
}