原谅新手ASP.NET MVC问题。我习惯了Code First与Entity Framework一起使用的教程。在这里,情况并非如此。我有一个表单,我希望用户填写。填写完毕后,我想使用EF 将值写入现有数据库。我无法弄清楚如何“捕获”视图中的值,以便我可以编写我的EF代码。我使用了一个模型,我将BeginForm重定向到了一个“编辑”动作方法,但我不知道如何让我的课程完成。这是HomeController方法:
[HttpGet]
public ActionResult Trial()
{
UserAccount account = new UserAccount();
return View(account);
}
public ActionResult Edit()
{
}
这是模型类:
public class UserAccount
{
public int AccountID { get; set; }
public string AccountName { get; set; }
public string RegistrationCode { get; set; }
public DateTime Created { get; set; }
}
}
以下是View向导生成的内容。当我点击“创建”按钮时,我想转到“编辑”操作菜单或我可以使用EF写入现有数据库表的某个地方。我该怎么做?
@model AlphaFrontEndService.Models.UserAccount
@{
ViewBag.Title = "Trial";
}
<h2>Trial</h2>
@using (Html.BeginForm("Edit", "Home"))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>UserAccount</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.AccountID, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.AccountID)
@Html.ValidationMessageFor(model => model.AccountID)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.AccountName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.AccountName)
@Html.ValidationMessageFor(model => model.AccountName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.RegistrationCode, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.RegistrationCode)
@Html.ValidationMessageFor(model => model.RegistrationCode)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Created, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Created)
@Html.ValidationMessageFor(model => model.Created)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
答案 0 :(得分:2)
您需要{Trial}方法的POST
操作,如下所示:
[HttpPost]
public ActionResult Trial(UserAccount model)
{
if (ModelState.IsValid)
{
//Store the form data into your database
}
return View(model);
}
然后在您的视图中,在表单中添加一个提交按钮元素,而不是Edit
,您只需要使用Trial
进行回发。
@using (Html.BeginForm("Trial", "Home")) {
//
<input type="submit" value="Submit"/>
}
注意:如果您没有其他原因,则无需创建其他编辑操作方法。
如果您不知道如何将数据保存到数据库,下面是一个示例:
创建您的DbContext类
public class MyDbContext : DbContext
{
public MyDbContext()
: base("name=YourDbConnection")
{
}
public DbSet<UserAccount> UserAccounts { get; set; }
}
然后动作方法如下:
public class HomeController : Controller
{
//
[HttpPost]
public ActionResult Trial(UserAccount model)
{
if (ModelState.IsValid)
{
using (var db = new MyDbContext())
{
db.UserAccounts.Add(model);
db.SaveChanges();
return RedirectToAction("Index");
}
}
return View(model);
}
}