将视图表单存储在现有数据库中

时间:2014-02-12 15:43:13

标签: asp.net-mvc entity-framework

原谅新手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>

1 个答案:

答案 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);
            }
  }