我是MVC C#的新手,我还在学习基础知识。 我在链接http://www.c-sharpcorner.com/UploadFile/ff2f08/multiple-models-in-single-view-in-mvc/上做了指南 方式6:"使用渲染动作方法"。 但是当我插入Object时,Post结果重复不停。救救我!
HomeController中:
header{
position: absolute;
width: 1115px;
}
header.fixed{
margin-top: 0;
}
查看 "指数" :
public ActionResult Index()
{
return View();
}
public PartialViewResult ShowPost() {
.......
return PartialView(Posts);
}
public PartialViewResult SavePost()
{
return PartialView("SavePost", new Post());
}
[HttpPost]
public PartialViewResult SavePost(Post post)
{
if (ModelState.IsValid)
{
repository.Insert(post);
return PartialView("Index");//?????????
}
else
{
return PartialView("Index");
}
}
" SavePost":
@{Html.RenderAction("SavePost","Home");}
@{Html.RenderAction("ShowPost","Home");}
" ShowPost"
.....
结果:我可以成功查看索引页面,但是当我单击提交时,将对象插入到db不断重复。
答案 0 :(得分:2)
所有子操作都使用其父http方法。因此,当您第一次使用get调用index方法时,child-renderactions也会生成http get请求。但是当您提交并返回索引视图时,索引视图中的所有子操作都将成为post。所以在提交之后,它会调用http post save方法。然后它返回索引视图。然后再次调用http post save ...无限循环。最佳实践永远不会在PostMethod中返回View()。
describe RestaurantsController do
login_admin
it { should permit(:name).for(:create) }
end
执行@{Html.RenderAction("SavePost","Home");}
时,任何get方法在由任何post方法呈现时都会执行public ActionResult SavePost()
。
public ActionResult SavePost(Post post)([HttpPost])
当您进行此操作时,它会重定向索引操作,并且索引视图中的子操作变为get请求而不是post。