繁体   English   中英

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

[英]send model object from view to controller method ASP.NET MVC C#

我知道有很多问题,但是没有一个我见过的(并且我已经搜索了两个小时),我是否在razor视图(.cshtml文件)中看到要写的内容触发与将模型对象保存到数据库或如何传递该对象相关的控制器方法。

所以我想做一个简单的注册页面。 我创建了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是我的数据库的名称)

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

这是我得到的错误。

, but then I don't know how to call the method with the argument, because in the razor view, I don't know which is the object that gets created on submitting the form. 我想重命名第二个方法 ,但是后来我不知道如何用参数调用该方法,因为在剃刀视图中,我不知道提交该对象时会创建哪个对象。形成。

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

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

但是在填写表格并单击提交按钮之后,什么也没有发生。 什么都不会插入数据库。

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

将属性[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上阅读更多内容

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM