从剃刀页面处理程序返回部分视图

时间:2018-08-27 19:45:59

标签: asp.net-core razor-pages

我在从剃须刀页面返回部分视图时遇到问题,我的情况是

我有一个局部视图,它是一种形式,并且具有一个模型。我在一个剃刀页面上有3种表格 表格A发布ModelA 表格B发布ModelB 我的问题是,我想在父页面(剃刀页面)上处理特定的发布事件。 我将如何返回此局部视图

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

} 

使用剃须刀页面是否可行? 我只想使用ajax返回带有指定模型的partialview。

1 个答案:

答案 0 :(得分:1)

  1. 如您所知,Razor Pages在PartialView上没有等效的PageModel方法。如果您确实想在PageModel方法中调用不同的视图,只需在PartialView中添加一个PageModel Helper方法:

    [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>

最后,您可以在PageModel中返回PartialView

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中。如下所示,在Page文件中使用它会更好:

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