2015-08-02 2 views
3

Я новичок в MVC C#, и я все еще изучаю основы. Я делал путеводитель по ссылке http://www.c-sharpcorner.com/UploadFile/ff2f08/multiple-models-in-single-view-in-mvc/ Путь 6: «Использование метода действия рендера». Но когда я вставляю объект, результаты публикации повторялись не останавливаясь. Помоги мне!Несколько моделей в одном представлении Просмотр: отправить сбой

HomeController:

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"); 
     } 
    } 

Посмотреть "Индекс":

   @{Html.RenderAction("SavePost","Home");} 

       @{Html.RenderAction("ShowPost","Home");} 

"SavePost":

 @model ERichLink.Domain.Entities.Post 

    @using (Html.BeginForm("SavePost", "Home",FormMethod.Post)) 
      { 
        @Html.TextBoxFor(model => model.Title) 
         @Html.TextBoxFor(model => model.CategoryID) 
        @Html.TextBoxFor(model => model.Description) 
        <input id="post_btn" value="post"type="submit"/> 
      } 

"ShowPost"

.....

РЕЗУЛЬТАТ: Я могу просмотреть страницу индекса успешно, но когда я нажимаю кнопку «Отправить», Post object insert to db repeat непрестанно.

+0

Попробуйте изменить «return PartialView (« Index »); // ???????" «вернуть RedirectToAction (« Index »); // ?????????" – iamrelos

ответ

2

Все дочерние действия используют свой родительский метод http. Поэтому, когда вы сначала вызываете индексный метод с get, child-renderactions также делает запрос http get. Но когда вы отправляете и возвращаете индексный указатель, все дочерние действия внутри индексного представления становятся почтовыми. Поэтому после отправки он вызывает метод post post post. Затем он возвращает индекс. Затем он снова вызывает HTTP post save ... infin loop. Лучшие практики никогда не возвращают View() внутри PostMethod. @{Html.RenderAction("SavePost","Home");} выполняет public ActionResult SavePost() при визуализации любым методом get выполняет public ActionResult SavePost(Post post)([HttpPost]) при визуализации любым методом публикации.

[HttpPost] 
    public ActionResult SavePost(Post post) 
    { 
      db.Posts.Add(post); 
      db.SaveChanges(); 
      return RedirectToAction("index"); 
    } 

Когда вы делаете это время, оно перенаправляет действие индекса, а действия child-actions внутри индексного представления становятся получателем запроса, а не сообщениями.