我来晚了吗?
更改枚举类型的值不是很令人满意。
都没有更改模型属性以使其可为空,然后添加[Required]属性以防止其为可空。
我建议使用ViewBag设置下拉菜单的默认选定值。
控制器下面的第4行是唯一重要的。
编辑:啊...新手...我的第一个想法是使用ModelState.SetModelValue,因为我的新手本能阻止我简单地尝试在ViewBag中设置所需的值,因为下拉列表已绑定到模型。我肯定有一个问题:它将绑定到模型的属性,而不是ViewBag的属性。我全错了:ViewBag没问题。我更正了代码。
这是一个例子。
模型:
namespace WebApplication1.Models {
public enum GoodMusic {
Metal,
HeavyMetal,
PowerMetal,
BlackMetal,
ThashMetal,
DeathMetal
}
public class Fan {
[Required(ErrorMessage = "Don't be shy!")]
public String Name { get; set; }
[Required(ErrorMessage = "There's enough good music here for you to chose!")]
public GoodMusic FavouriteMusic { get; set; }
}
}
控制器:
namespace WebApplication1.Controllers {
public class FanController : Controller {
public ActionResult Index() {
ViewBag.FavouriteMusic = string.Empty;
return View( "Index" );
}
[HttpPost, ActionName( "Index" )]
public ActionResult Register( Models.Fan newFan ) {
if( !ModelState.IsValid )
return View( "Index" );
ModelState.Clear();
ViewBag.Message = "OK - You may register another fan";
return Index();
}
}
}
视图:
@model WebApplication1.Models.Fan
<h2>Hello, fan</h2>
@using( Html.BeginForm() ) {
<p>@Html.LabelFor( m => m.Name )</p>
<p>@Html.EditorFor( m => m.Name ) @Html.ValidationMessageFor( m => m.Name )</p>
<p>@Html.LabelFor( m => m.FavouriteMusic )</p>
<p>@Html.EnumDropDownListFor( m => m.FavouriteMusic, "Chose your favorite music from here..." ) @Html.ValidationMessageFor( m => m.FavouriteMusic )</p>
<input type="submit" value="Register" />
@ViewBag.Message
}
如果模型索引操作中没有“ ModelState.SetModelValue或ViewBag.FavouriteMusic = string.Empty”行,则默认选择的值为“ Metal”而不是“ Select your music ...”
Select a license
为ID为0的枚举值之一。当用户未从枚举中选择值之一时,我希望能够显示错误消息。