我知道有很多关于此的问题,但不是我见过的一个问题(现在我已经搜索了两个小时),我是否在剃须刀视图中看到了要写的内容(.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")'"
但是在填写表单并单击“提交”按钮后,没有任何反应。什么都没有插入到数据库中。
我现在不知道该怎么办。请帮忙。
答案 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);
}