Pau*_*aul 0 validation asp.net-mvc-3
我在DropDownListFor上使用验证时遇到问题...
我的型号:
public class User
{
...
public virtual int Id{ get; set; }
[Required(ErrorMessage = "Required.")]
public virtual Role Role { get; set; }
}
public class Role
{
public virtual int Id{ get; set; }
[Required(ErrorMessage = "Required.")]
public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器:
public ActionResult Edit()
{
ViewBag.Roles = new SelectList(new Repository<Role>().GetAll(), "Id", "Name");
return View();
}
Run Code Online (Sandbox Code Playgroud)
我的编辑视图(强类型)
@model User
...
@Html.LabelFor(model => model.Role)
@Html.DropDownListFor(model => model.Role.Id, ViewBag.Roles as SelectList, "-- Select --",new { @class = "form radius" })
@Html.ValidationMessageFor(model => model.Role)
Run Code Online (Sandbox Code Playgroud)
一切都很好,当我尝试保存用户模型时,问题就解决了:
[HttpPost]
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
...
}
Run Code Online (Sandbox Code Playgroud)
ModelState.IsValid始终为false ...在ModelState内部查看,错误在Role.Name键中...错误是:Name字段是必需的
有没有办法解决这个问题?怎么样?
谢谢
您已在属性上放置了必需属性,Name但从未将其发送到服务器,因此您的模型无效(仅限IdPOST).所以你应该把它放在Id财产上:
public class Role
{
[Required(ErrorMessage = "Required.")]
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,您应该创建此Id属性,Nullable因为您为下拉列表定义了一个空值,如果用户没有选择任何值,它将崩溃.所以你的模型应该是这样的:
public class Role
{
[Required(ErrorMessage = "Required.")]
public virtual int? Id { get; set; }
public virtual string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您还可以从User类的Role属性中删除Required属性.这不是必需的.
最后的建议,可能是最重要的建议:用ViewBag你的视图模型中的属性替换这个丑陋,以便帮助器看起来像这样:
@Html.DropDownListFor(
model => model.Role.Id,
Model.Roles,
"-- Select --",
new { @class = "form radius" }
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8516 次 |
| 最近记录: |