我有一个带有[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;
感谢任何帮助。再说一次,如果不清楚,请询问是否清晰
由于
编辑因为我不是很清楚;)
答案 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);
}