我使用了這些模型類上我的網站設置頁面:子對象的AddModelError?
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"
的密鑰,但這不起作用。
或者,我在這裏採取了錯誤的方法?我應該如何在同一頁面上處理兩種表單?
如果您使用的是由@ Html.EditFor()爲重點,以.AddModelError呈現的輸入元素的「id」屬性的值?還是你? –
您最大的問題是您爲模型類型AccountVM創建了元素,但是您的控制器後期望PasswordVM - 值永遠不會從表單中獲取,因爲輸入元素被命名爲「Password.OldPassword」,但模型聯編程序僅查找「舊密碼」。您應該更改EditPassword以接收AccountVM類型的參數,然後使用它的密碼屬性。 –