0

我有一个有两种形式的屏幕。一个允许登录到站点,另一个允许登录到 ftp。

Login 视图使用 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("登录", 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) 两个子模型的每个字段必须有不同的名称。

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 回答