MVC3 Несколько PartialViews в одном представлении

Ответ здесь - это именно то, что у меня происходит. Но когда я попал в submit в частичном просмотре, вывод - это просто html для PartialView! Я новичок в MVC3, поэтому я уверен, что мне просто не хватает чего-то, что я должен был уже узнать.

 public ActionResult CreateV2Worksheet()
    {
        return PartialView("_NewV2WorksheetInput", new NewV2WorksheetInputModel());
    }

    [HttpPost]
    public ActionResult CreateV2Worksheet(NewV2WorksheetInputModel pNewV2Input)
    {
        if (ModelState.IsValid)
        {
            ModelState.AddModelError("ScreeningNumber", "random server err");
            return PartialView("_NewV2WorksheetInput", pNewV2Input);    
        }

        return PartialView("_NewV2WorksheetInput", pNewV2Input);
    }

Ответ 1

Я собираюсь предположить, что вы не отправляете через AJAX, так что вы делаете полную обратную передачу. В этом случае ваш вывод имеет смысл: вы отправляете на частичный вид, а затем все, что вы возвращаете, это html для частичного представления, так как после того, как сообщение начато, ваше состояние html исчезло. Частицы - это просто частичные.. вы не можете публиковать до частичного и ожидать получения полного результата.

Я бы порекомендовал либо отправку на действие, которое отображает всю страницу, либо частичное отображение либо полного просмотра страницы (return FullPageView( someData );), либо перенаправление на полный просмотр страницы (return Redirect( "FullPageview" );).

В качестве альтернативы вы можете отправлять через ajax и возвращать JsonResult, а затем обрабатывать любые изменения пользовательского интерфейса на клиенте (jquery и т.д.). Вы должны иметь возможность сделать это с помощью Ajax.BeginForm().. но это не то, что я лично использую, поэтому не может этого сделать. Там есть сообщение здесь, в котором показано, как взять необработанный частичный вывод и обновить пользовательский интерфейс. Другой метод - вернуть объект с помощью JsonResult с обработкой ошибок и т.д. И проанализировать его. То есть.

return Json( someReturnObjectThatYouDefinedThatMayAlsoHaveAnErrorState );

Ответ 2

Используйте return View("_NewV2WorksheetInput", pNewV2Input);

вместо return PartialView("_NewV2WorksheetInput", pNewV2Input);.

Затем частичное представление будет отображаться в макете, который вы использовали для текущей страницы. Если вы хотите отобразить частичный вид в другой макет, поместите его поверх своего PartialView.

@{
      Layout="~/Views/Shared/<Layout Name>.cshtml"
}