1つのビューに「パスワードのリセット」セクションと「ユーザープロファイル情報の更新」セクションがあります。
ResetPwdModelとUserInfoModelの2つの子モデルを持つ親モデルがあります。
パスワードのリセット送信とプロファイル情報の保存送信の両方で、結果のURLを同じ(現在のURLと同じ)に見せたいので、ユーザーが混乱することはありません。
これを実現するために、一方がResetPwdModelを受け入れ、もう一方がUserInfoModelを受け入れるようにアクションメソッドをオーバーロードしました。ただし、エラーメッセージが表示されますThe current request for action 'profile' on controller type 'XXController' is ambiguous...
これを解決するためのエレガントな方法はありますか?私の目標は、1つのビューで2つのモデルを使用し、投稿URLを現在のURLと同じように見せることです。
モデル
public class ProfileParentModel
{
public ProfileResetPwdModel ResetPwd { get; set; }
public ProfileUserInfoModel UserInfo { get; set; }
}
public class ProfileResetPwdModel
{
[Required]
[DataType(DataType.Password)]
[Display(Name = "Profile_lbl_OldPassword", ResourceType = typeof(Resource))]
public string OldPassword { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Profile_lbl_NewPassword", ResourceType = typeof(Resource))]
public string NewPassword { get; set; }
[Compare("NewPassword", ErrorMessageResourceName = "Profile_Error_NotMatch", ErrorMessageResourceType = typeof(Resource))]
[Required]
[DataType(DataType.Password)]
[Display(Name = "Profile_lbl_ConfirmNewPassword", ResourceType = typeof(Resource))]
public string ConfirmNewPassword { get; set; }
}
public class ProfileUserInfoModel
{
[Display(Name = "Profile_lbl_FirstName", ResourceType = typeof(Resource))]
public string FirstName { get; set; }
[Display(Name = "Profile_lbl_LastName", ResourceType = typeof(Resource))]
public string LastName { get; set; }
[Display(Name = "Profile_lbl_WorkTitle", ResourceType = typeof(Resource))]
public string WorkTitle { get; set; }
[Display(Name = "Profile_lbl_CompanyName", ResourceType = typeof(Resource))]
public string CompanyName { get; set; }
[Display(Name = "Profile_lbl_CompanyAddress", ResourceType = typeof(Resource))]
public string CompanyAddress { get; set; }
}
意見
@{
var passwordHtml = Html.HtmlHelperFor(Model.ResetPwd);
var profileHtml = Html.HtmlHelperFor(Model.UserInfo);
}
@using (passwordHtml.BeginForm())
{
//HTML goes here...
}
@using (profileHtml.BeginForm())
{
//HTML goes here...
}
コントローラ
[ActionName("Profile")]
[HttpPost]
[Authorize]
public ActionResult ResetPassword(ProfileResetPwdModel model)
{
return View("Profile", parentModel);
}
[ActionName("Profile")]
[HttpPost]
[Authorize]
public ActionResult SaveUserInfo(ProfileUserInfoModel model)
{
return View("Profile", parentModel);
}