将数据从寄存器表单放到数据库中

时间:2016-01-22 18:37:33

标签: asp.net-mvc database

我有一个注册表单(我正在使用ASP.NET MVC),我试图将每个字段的内容解析到我的数据库,但我真的不知道如何做到这一点。

首先,我不知道应该在哪里建立与数据库的连接。它应该在我的注册控制器内吗?对不起,如果听起来有点傻,但我对这些东西都是新手!以下代码来自我的注册表格视图

@model Client.Models.RegisterModel
@{
    ViewBag.Title = "Register";
}

@using (Html.BeginForm("Register", "Register", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Create a new account.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.Name, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(m => m.Surname, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Surname, new { @class = "form-control" })
        </div>
    </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Number, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Number, new { @class = "form-control" })
            </div>
        </div>
            <div class="form-group">
                @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
                <div class="col-md-10">
                    @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
                </div>
            </div>
                <div class="form-group">
                    @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
                    </div>
                </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.ConfirmPassword, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control" })
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.address, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.address, new { @class = "form-control" })
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(m => m.postcode, new { @class = "col-md-2 control-label" })
                        <div class="col-md-10">
                            @Html.TextBoxFor(m => m.postcode, new { @class = "form-control" })
                        </div>

                    </div>
                        <div class="form-group">
                            @Html.LabelFor(m => m.female, new { @class = "col-md-2 control-label" })
                            <div class="col-md-10">
                                @Html.CheckBoxFor(m => m.female, new { @class = "col-md-2 control-label" })
                            </div>

                        </div>
                        <div class="form-group">
                            @Html.LabelFor(m => m.male, new { @class = "col-md-2 control-label" })
                            <div class="col-md-10">
                                @Html.CheckBoxFor(m => m.male, new { @class = "col-md-2 control-label" })
                            </div>

                        </div>
                        <div class="form-group">
                            <div class="col-md-offset-2 col-md-10">
                                <input type="submit" class="btn btn-default" value="Υποβολή" />
                            </div>
                        </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

1 个答案:

答案 0 :(得分:0)

目前,您将表单的操作属性值设置为&#34;注册/注册&#34; 。这意味着当您提交表单时,表单将发布到RegisterController中的HttpPost Register操作方法。由于您已经有一个用于在表单中呈现输入字段的类,因此可以将其用作操作方法的参数类型,以便在发布表单时,默认模型绑定器可以将表单数据映射到该类对象的属性。

所以你的HttpPost方法看起来像

[HttpPost]
public ActionResult Register(RegisterModel model)
{
  var name = model.Name;
  // to do : Save and redirect 
}

现在,为了保存数据,您可以读取模型对象的不同属性值(例如:model.Name)并使用它来插入数据库。有很多不同的选项可以使用纯ado.net代码with SqlConnection and ExecuteNonQuery method或使用ORM库,如Entity framework或Hibernate等。请记住,选择是你的。 没有这样的规则说您应该始终将实体框架与MVC应用程序一起使用

  

它应该在我的注册控制器内吗?

您将看到许多示例/教程在控制器内部都有代码以将数据保存到数据库。代码将起作用。这是一个好习惯吗?可能不是 !将数据访问代码移动到单独的类/层/项目并从需要的地方调用它始终是一个好主意。

如果你是MVC的新手以及将数据保存到db的概念。我建议只需将代码放在控制器本身(就像那些教程那样)并使其工作。一旦你成功了,你可以考虑通过移动到single responsibility principle之后的另一个类/层来重构它。