将模型发布到MVC ActionResult

时间:2015-12-18 19:54:58

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

我有一个带有[HttpGet]的ASP.net应用程序,用于查看名为'创建'的ActionResult。在名为Students

的控制器上

我的学生'然后发布到以下控制器。

[HttpPost]
public async Task<ActionResult> Create(Student student)
{
    Student.Add(student);
    if (ModelState.IsValid)
    {
        var result = db.Students.Add(student);
        await db.SaveChangesAsync();
        return Details(result);
    }
    return View(new CreateStudent());
}

return Details(result); 是我感兴趣的专栏。

之前我在 RedirectToAction 中传递了结果。 Id属性,并使用GET请求查询数据库。

但是,我不想拥有类似于&#39; students / details / id = 123&#39;或者&#39;学生/详情/ 123&#39;我想 Post 我的模型给控制器&#39;学生/详细信息&#39;

var结果是单个学生&#39;以及我的&#39;详细信息&#39; ActionResult看起来像这样:

[HttpPost]
public async Task<ActionResult> Details(Student student)
{
   //
}

return Details(result); 不起作用,我收到一条错误消息,说明:

&#39;传入字典的模型项的类型为&#39; LinkApp.Models.Student&#39;,但此字典需要类型为&#39; LinkApp.Models.DTOs.CreateStudent&的模型项#39;&#39;

但我相信这是因为我的网址永远不会转到“学生/详细信息”,我的网址仍会显示&#39; /学生/创建&#39;

感谢任何帮助。再说一次,如果不清楚,请询问是否清晰

由于

编辑因为我不是很清楚;)

1 个答案:

答案 0 :(得分:1)

所以我对你想要实现的目标感到困惑。

以下是我收集的内容:您想要POST数据。现在你有一个GET方法。您可以将GET方法视为可检索的内容,将POST视为可提供的内容。

因此,您的GET方法不应该尝试POST任何内容。

您的GET方法看起来应该是POST,因为您正在尝试&#34;给予&#34;数据是某些东西,而不是获取数据。

[HttpPost]
public async Task<ActionResult> Create(Student student)
    {
        Student.Add(student);
        if (ModelState.IsValid)
        {
            var result = db.Students.Add(student);
            await db.SaveChangesAsync();

            return View("Details", result);
        }

        return View(); //You should add a property to the model called ErrorMessage or something like that, then you could do student.ErrorMessage = "Model state was not valid";, then you could do return View(student); and in the view you could do something like @if (Model.ErrorMessage != null) { @Html.DisplayFor(m=>m.ErrorMessage); }
    }

这是您的帖子应该是什么样子,您将Student模型保存到数据库并返回到视图。

现在你的GET应该是这样的:

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

修改:

如果您希望自己的帖子执行上面评论中留下的错误消息,您只需在第二个return View();

上方执行此操作
student.ErrorMessage = "Model state was not valid;" //Or whatever you want to say
return View(student);

然后在你看来你会有这样的事情:

@if (student.ErrorMessage != null)
{
 @Html.DisplayFor(m => m.ErrorMessage);
}