0

2つのフォームの画面があります。1つはサイトへのログインを許可し、もう1つはftpへのログインを許可します。

ログインビューは、WelcomeScreenViewModel(結合モデル)で強く入力されます。各フォームは、強く型付けされた部分ビューです。

クラスの定義は次のとおりです。

public class LogOnViewModel
    {
        [LocalizedDisplayNameAttribute("username", typeof(MyLabels.labels))]
        [Required]
        public string UserName { get; set; }
        [LocalizedDisplayNameAttribute("password", typeof(MyLabels.labels))]
        [Required]
        public string Password { get; set; }
    }

    public class FTPViewModel
    {
        [LocalizedDisplayNameAttribute("username", typeof(MyLabels.labels))]
        [Required]
        public string UserName { get; set; }
        [LocalizedDisplayNameAttribute("password", typeof(MyLabels.labels))]
        [Required]
        public string Password { get; set; }
    }

    public class WelcomeScreenViewModel
    {
        public LogOnViewModel LogOnModel { get; set; }
        public FTPViewModel FTPModel { get; set; }
    }

メインページはWelcomeScreenViewModelを継承し、部分ビューを次のようにレンダリングします。

Html.RenderPartial( "Logon"、Model.LogOnModel);

Html.RenderPartial( "FTP"、Model.FTPModel);

私のコントローラーコード:

// To display blank login on load of page
public ActionResult Login(string language)
        {
            WelcomeScreenViewModel combined = new WelcomeScreenViewModel();
            combined.FTPModel = new FTPViewModel();
            combined.LogOnModel = new LogOnViewModel();
            return View(combined);
        }

// Called when clicking submit on first form
[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Logon(string language, LogOnViewModel logon)
        {
            WelcomeScreenViewModel combined = new WelcomeScreenViewModel();
            combined.FTPModel = new FTPViewModel();
            combined.LogOnModel = logon;

            if (!ModelState.IsValid)
            {
                ViewData["result"] = "Invalid login info / Informations de connexion incorrectes";

                // This is the part I can't figure out.  How do I return page with validation summary errors
                return View(logon);
            }
            else
            {
                ...
            }            
        }

これまでのところ、私の問題は、ModelStateが無効な場合に何を返すかということです。検証サマリーエラーのあるページを返すにはどうすればよいですか?上に表示されたコードは、検証なしで部分ビューフォーム(マスター内ではない)を返すだけです。私は何が間違っているのですか?私はこの投稿を始めましたが、それは私を助けるのに十分なコードを示していませんでした。

どんな助けでもいただければ幸いです。ありがとう。

4

1 に答える 1

1

私のコードには2つの問題がありました。

1) 2 つのサブモデルは、各フィールドに異なる名前を付ける必要があります。

public class LogOnViewModel
    {
        [LocalizedDisplayNameAttribute("username", typeof(MyLabels.labels))]
        [Required]
        public string UserName { get; set; }
        [LocalizedDisplayNameAttribute("password", typeof(MyLabels.labels))]
        [Required]
        public string Password { get; set; }
    }

    public class FTPViewModel
    {
        [LocalizedDisplayNameAttribute("username", typeof(MyLabels.labels))]
        [Required]
        public string ftpUserName { get; set; }
        [LocalizedDisplayNameAttribute("password", typeof(MyLabels.labels))]
        [Required]
        public string ftpPassword { get; set; }
    }

2) これは、検証と値を返すために使用するコードです。

return View("~/Views/Login/Login.aspx",combined);
于 2012-11-16T19:50:30.247 に答える