Возвратите частичное представление от бритвенной страницы Обработчик - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с возвратом частичного представления со страницы бритвы, мой сценарий

У меня есть частичное представление, которое является формой и имеет модель. У меня есть 3 формы на одной странице бритвы Форма А опубликовать модель А Форма B пост ModelB Моя проблема заключается в том, что я хочу обработать определенное событие после публикации на родительской странице, которая является бритвой. Как бы мне вернуть это частичное представление

OnPostModelA(ModelA model) 
{
   if(! ModelState.IsValid)
        return Partialview("_CreateModelA", model);

} 

Возможно ли это с помощью бритвенных страниц или это невозможно? Я просто хочу вернуть частичное представление с его назначенной моделью, используя ajax.

1 Ответ

0 голосов
/ 28 августа 2018
  1. Как вы знаете, Razor Pages не имеют эквивалентного PartialView метода для PageModel. Если вы хотите вызывать различные парциальные представления в методе PageModel, просто добавьте в вас PartialView вспомогательный метод PageModel:

    [NonAction]
    public virtual PartialViewResult PartialView(string viewName, object model)
    {
        ViewData.Model = model;
    
        return new PartialViewResult()
        {
            ViewName = viewName,
            ViewData = ViewData,
            TempData = TempData
        };
    }
    

Здесь я использую ViewData.Model для хранения вашего объекта модели, скажем, ваш тип модели назван X1Model:

Вы можете использовать его в частичных видах.

Создать простое частичное представление с именем _CreateModelA.cshtml:

@model HelloModel

AAAAA
<div>
    @Model.Model.Welcome
</div>

и другой частичный вид с именем _CreateModelB.cshtml:

@model HelloModel

BBBBBBBB
<div>
    @Model.Model.Welcome
</div>

Наконец, вы можете вернуть PartialView в вашу PageModel:

public class HelloModel : PageModel
{

    public X1Model Model { get; set; }

    public ActionResult OnGet(int rand = 0)
    {
        var flag = rand % 2 == 0 ? true : false;
        var model = new HelloModel() {
            Model = new X1Model {
                Welcome = "Hello,world",
            }
        }; 
        if (flag)
        {
            return PartialView("_CreateModelA", model);
        }
        else
        {
            return PartialView("_CreateModelB", model);
        }
    }

    [NonAction]
    public virtual PartialViewResult PartialView(string viewName, object model)
    {
        // ...
    }
}

Вот скриншот:

enter image description here

  1. Однако не рекомендуется размещать частичную логику представления в PageModel. Использование его в файле подкачки, как показано ниже, намного приятнее:

@if(){
    <partial name="" />
}else{
    <partial name="" /> 
}
...