将模型对象从视图发送到控制器方法ASP.NET MVC C#

时间:2017-09-22 14:23:49

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

我知道有很多关于此的问题,但不是我见过的一个问题(现在我已经搜索了两个小时),我是否在剃须刀视图中看到了要写的内容(.cshtml file)触发与将模型对象保存到数据库相关联的控制器方法,或者传递该对象的方式。

所以我想制作一个简单的注册页面。我创建了Users模型,创建了与模型关联的视图,名为Register.cshtml,我通过具有Register方法的Account控制器访问视图:

public ActionResult Register()
{
return View();
}

我所遵循的教程使用在为用户模型创建时在视图中生成的默认代码。

<input type="submit" value="Create" class="btn btn-default" />

并声明您应该在帐户控制器中创建一个方法,如下所示:

 public ActionResult Register(User obj)
    {
        if (ModelState.IsValid)
        {
            DatabaseEntities db = new DatabaseEntities();
            db.Users.Add(obj);
            db.SaveChanges();
        }
        return View(obj);
    }

(其中DatabaseEntities是我的数据库的名称)

这不起作用,因为在运行应用程序时,它说它不知道要触发的两种方法中的哪一种。

类型Biblioteca.Controllers.AccountController上的System.Web.Mvc.ActionResult Register() System.Web.Mvc.ActionResult在Biblioteca.Controllers.AccountController类型上注册(Biblioteca.Models.User)

这是我得到的错误。

我想重命名第二种方法 RegisterPost(User obj),但后来我不知道怎么用参数调用方法,因为在剃刀视图中,我不知道这是在提交表单时创建的对象。

我可以使用@ Html.ActionLink(),但我不知道如何发送对象。 我实际上尝试在提交按钮中添加一个onclick方法,如下所示:

 onclick="location.href='@Url.Action("RegisterPost", "Account")'"

但是在填写表单并单击“提交”按钮后,没有任何反应。什么都没有插入到数据库中。

我现在不知道该怎么办。请帮忙。

2 个答案:

答案 0 :(得分:3)

将属性[HttpGet]添加到第一个操作,将[HttpPost]添加到第二个操作:

[HttpGet]
public ActionResult Register()
{
    return View();
}

[HttpPost]
public ActionResult Register(User obj)
{
    if (ModelState.IsValid)
    {
        DatabaseEntities db = new DatabaseEntities();
        db.Users.Add(obj);
        db.SaveChanges();
    }
    return View(obj);
}

您可以在MSDN

上阅读更多内容

答案 1 :(得分:2)

要扩展一点,请尝试在第二个Action方法上方添加[HttpPost]

[HttpPost]
public ActionResult Register(User obj)
{
    if (ModelState.IsValid)
    {
        DatabaseEntities db = new DatabaseEntities();
        db.Users.Add(obj);
        db.SaveChanges();
    }
    return View(obj);
}