用户注册页面,具有已定义的用户MODEL(MVC)

时间:2016-07-02 08:36:26

标签: c# asp.net asp.net-mvc asp.net-mvc-4

之前我曾与.Net webforms合作过,现在正在开发一个MVC项目。

我正在创建用户注册页面。我不知道它的MODEL应该是什么样的。

参见数据库图

Diagram

用户注册页面:

  • 名字

  • 电子邮件地址

  • 订阅简报?
  • 密码

  • 选择您所在的城市

  • .....

我想我必须在这项任务中这样做:

第1步

使用数据库

中的数据填充城市dropdownList(选择您所在的城市)

第2步

UserEmail表中插入用户电子邮件地址,并将子目录设置为0或1

第3步

将用户注册数据和EmailID(从UserEmails表中获取),CityID保存到Users

我应该制作一个大型的模型,如下:

Public Class Registration Model
{
     Get, set:
     all USEREMAIL plugs ties
     all Users plugs ties
     all Cities plugs ties
}

如何在MVC中开始这项任务?

(我知道如何在webforms中开发它,但MVC模型让我感到困惑)

1 个答案:

答案 0 :(得分:1)

你是在正确的轨道上。你正在尝试创建一个让用户完成注册表单的视图,这个视图需要使用用户模型,同一类型显示下拉列表中的城市列表来自数据库中的其他表但与用户相关。

在MVC中有一个名为viewmodel的概念,它只是一个将一个或多个模型组合在一起的简单类。

下面我创建了一个名为SiteUser的模型,然后创建了另一个名为SiteUserViewModel的模型,该模型继承自用户并为我们提供了所有用户属性 PLUS 我们可以使用的其他属性填充城市。当我们显示页面时,我们将使用SiteUserViewModel但是当我们发布到控制器时将用户保存在数据库中我们将使用SiteUser

<强>型号:

namespace MVCTutorial.Models
{
    public class SiteUser
    {
        [Display(Name="First Name")]
        public string FirstName { get; set; }

        [Display(Name = "Last Name")]
        public string LastName { get; set; }

        [DataType(DataType.EmailAddress)]
        public string EmailAddress { get; set; }

        [Display(Name = "Subscribe To Newsletter?")]
        public bool SubscribeToNewsletter { get; set; }

        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Display(Name="City")]
        public int CityId { get; set; }
    }

    public class SiteUserViewModel : SiteUser
    {
        public List<SelectListItem> Cities { get; set; }
    }
}

<强>控制器:

public class SiteUserController : Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        var model = new SiteUserViewModel();

        //Replace this with logic that reads cities from the database
        var city1 = new SelectListItem { Text = "Johannesburg", Value = "1" };
        var city2 = new SelectListItem { Text = "Cape Town", Value = "2" };

        model.Cities = new List<SelectListItem> { city1, city2 };
        return View(model);
    }

    [HttpPost]
    public ActionResult CreateUser(SiteUser user)
    {
        System.Diagnostics.Debugger.Break();
        //Write the code to add user to the database
        return View();
    }
}

查看:

@model MVCTutorial.Models.SiteUserViewModel

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Create User</title>
</head>
<body>
    @using (Html.BeginForm("CreateUser", "SiteUser"))
    {
        @Html.ValidationSummary(true)
        <fieldset>
            <legend>Site User</legend>

            <div class="editor-label">
                @Html.LabelFor(model => model.FirstName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.LastName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.EmailAddress)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.EmailAddress)
                @Html.ValidationMessageFor(model => model.EmailAddress)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.SubscribeToNewsletter)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.SubscribeToNewsletter)
                @Html.ValidationMessageFor(model => model.SubscribeToNewsletter)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Password)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Password)
                @Html.ValidationMessageFor(model => model.Password)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.CityId)
            </div>
            <div class="editor-field">
               @Html.DropDownList("CityId", Model.Cities, "Please select one")
            </div>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }
</body>
</html>

<强>结果: Using view model in MVC

Posting a model in MVC