【发布时间】:2017-06-07 22:50:44
【问题描述】:
我清理了一个较旧的项目 (MVC 5.2.2),发现如果页面第一次作为响应呈现在 HttpGet 请求:生成的 HTML 代码根本不包含 selected 属性。
如果我检查视图模型,即 SelectList 项(在控制器中和呈现的视图中),则所需项的成员 Selected 设置为 true。项目的 Id 是 enum 值。
当相同的页面被呈现为对 HttpPost 请求的响应时,一切正常。最糟糕的是,在检查模型时,值与 HttpGet 请求上的值相同,并且 SelectLists 在两种情况下都创建了相同的例程...
而不是使用 enum 作为选定项目 Id 我尝试了一个完整项目的实例,如 answer here 中的选定项目,结果相同:不适用于 HttpGet.
列表是这样构造的:
List<CashType> types;
if (AIncludeAll)
types = ADbContext.CashTypes.OrderBy(c => c.Ident).ToList();
else
types = ADbContext.CashTypes.Where(c => c.Id != CashTypeValues.All).OrderBy(c => c.Ident).ToList();
//
foreach (var type in types)
type.Translation = CashTypeValueToDescription(type.Id);
return new SelectList(types, "Id", "Translation", ACashType);
CashType 来自 DB 模型:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
public CashTypeValues Id { get; set; }
[Required]
[StringLength(DBDomains.D_IDENTCODE)]
[Index(IsUnique = true)]
public string Ident { get; set; }
[NotMapped]
public string Translation { get; set; }
视图模型是
[Display(Name = "View_Unit_CashType", ResourceType = typeof(WebGui))]
public CashTypeValues CashType { get; set; }
public SelectList CashTypes { get; set; }
最后,Razor 中的用法如下所示:
<div class="Theme-Bottom-Filter-Field">
@Html.LabelFor(m => m.CashType)
@Html.DropDownListFor(m => m.CashType, Model.CashTypes, new { Id = "CashTypeSelector" })
</div>
有人知道我错过了什么吗?
谢谢,pf
【问题讨论】:
-
在我的经验中选择的列表被忽略了。确保 CashType 的值等于你想要选择的值
-
CashType 值 ui 等于 item.Id 我不会选择。
标签: c# asp.net-mvc razor