Mic*_*rne 4 razor asp.net-mvc-3
我对MVC中的HTML帮助扩展很新,更不用说在Razor中了,我正在寻找一种简单,整洁的方式来显示一年中12个月的下拉列表,其值为数字和文本日期的"MMM"表示.
所以最后的HTML应该是这样的:
<select>
<option value="1">Jan</option>
<option value="2">Feb</option>
<option value="3">Mar</option>
<!-- etc -->
</select>
Run Code Online (Sandbox Code Playgroud)
是否可以在视图中完全执行此操作?我需要一个用户的答案,@Html.DropDownListFor()所以我可以利用自动模型绑定.我接近下面的代码行,但它没有明确的值.
@Html.DropDownListFor(model => Model.DobMonth, new SelectList(Enumerable.Range(1,12).Select(r => new DateTime(2000, r, 1).ToString("MMM"))), "- -")
Run Code Online (Sandbox Code Playgroud)
出于非技术原因,我不能使用jQuery datepicker.
nem*_*esv 19
你几乎就在那里,问题是如果你在创建它时没有提供dataValue和dataText参数,SelectList它只会调用ToString项目并将它们用作选项的文本.
你需要的是从你的选择中返回文本,值对:
@Html.DropDownListFor(model => Model.DobMonth, new SelectList(
Enumerable.Range(1, 12)
.Select(r => new
{
Text = new DateTime(2000, r, 1).ToString("MMM"),
Value = r.ToString()
}),
"Value", "Text", Model.DobMonth))
Run Code Online (Sandbox Code Playgroud)
如果您想要一个"空"项,您需要手动添加它:
@Html.DropDownListFor(model => Model.DobMonth, new SelectList(
new [] { new { Text = "- -", Value = (string)null } }.Concat(
Enumerable.Range(1, 12)
.Select(r => new
{
Text = new DateTime(2000, r, 1).ToString("MMM"),
Value = r.ToString()
})),
"Value", "Text", Model.DobMonth))
Run Code Online (Sandbox Code Playgroud)