C# 子对象的AddModelError?
我的网站上有一个设置页面,使用以下模型类:C# 子对象的AddModelError?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我的网站上有一个设置页面,使用以下模型类: public class NameVm { public string GivenName { get; set; } public string FamilyName { get; set; } } public class PasswordVm { public string OldPassword { get; set; } public string NewPassword { get; set; }
public class NameVm
{
public string GivenName { get; set; }
public string FamilyName { get; set; }
}
public class PasswordVm
{
public string OldPassword { get; set; }
public string NewPassword { get; set; }
public string ConfirmPassword { get; set; }
}
public class AccountVm
{
public NameVm Name { get; set; }
public PasswordVm Password { get; set; }
}
这是控制器:
public class AccountController : Controller
{
[HttpGet]
public override ActionResult Index()
{
var accountVm = AccountVmFromActiveUser();
return View(accountVm);
}
[HttpPost]
public ActionResult EditName(NameVm vm)
{
...
}
[HttpPost]
public ActionResult EditPassword(PasswordVm vm)
{
if (ModelState.IsValid)
{
if (!ValidateUser(this.ActiveUser, vm.OldPassword))
{
ModelState.AddModelError("????",
"Existing password is incorrect.");
}
else
UpdateUserPassword(vm);
}
var accountVm = AccountVmFromActiveUser();
accountVm.Password = vm;
return View(accountVm);
}
}
在我的Account.cshtml
文件中,我定义了两个表单——一个提交到EditName
,一个提交到EditPassword
。这是一个大文件,下面是一个小摘录:
@Html.EditorFor(model => model.Password.OldPassword)
@Html.ValidationFor(model => model.Password.OldPassword)
我的问题是:如何获取ValidationFor
以显示我在EditPassword
方法中添加的错误消息?我尝试使用“Password.OldPassword”
,但没有成功
或者,我是否采取了错误的方法?我应该如何处理在同一页上有两个表单 您可以使用局部视图 1) 在
Account.cshtml
中,分离提交密码的表单,并将其放入部分视图\u EditPassword.cshml
(通常我将部分视图放入views\Shared
文件夹)
使用
在Account.cshtml
2) 在部分视图中,您可以使用
@Html.EditorFor(model => model.OldPassword)
@Html.ValidationFor(model => model.OldPassword)
您应该会看到验证错误如果使用由@Html.EditFor()呈现的输入元素的“id”属性的值作为.AddModelError的键,该怎么办?或者是吗?您更大的问题是您为模型类型AccountVM创建元素,但您的控制器post需要PasswordVM-这些值永远不会从表单中获取,因为输入元素名为“Password.OldPassword”,但模型绑定器只查找“OldPassword”。您应该更改EditPassword以接收AccountVM类型的参数,然后使用其中的password属性。
@Html.EditorFor(model => model.OldPassword)
@Html.ValidationFor(model => model.OldPassword)