单个视图中的多个模型:提交失败

时间:2015-08-02 15:05:13

标签: c# asp.net-mvc

我是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不断重复。

1 个答案:

答案 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。