我有一个注册表单(我正在使用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>
答案 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之后的另一个类/层来重构它。