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

Edu*_*elo 5 asp.net-core razor-pages

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

我有一个局部视图,它是一个表单并且有一个模型。我有 3 个表单驻留在单个剃刀页面上 表单 A 发布 ModelA 表单 B 发布 ModelB 我的问题是,我想在作为剃刀页面的父页面上处理特定的发布事件。我如何返回这个部分视图

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

} 
Run Code Online (Sandbox Code Playgroud)

使用剃刀页面可以做到这一点还是不可能?我只想使用 ajax 返回带有指定模型的局部视图。

itm*_*nus 8

  1. 如您所知,Razor PagesPartialViewPageModel. 如果您确实想在PageModel方法中调用不同的部分视图,只需在您中添加一个PartialView辅助方法PageModel

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

这里我使用 aViewData.Model来存储您的模型对象,假设您的模型类型命名为X1Model

您可以在部分视图中使用它。

创建一个简单的局部视图,命名为_CreateModelA.cshtml

@model HelloModel

AAAAA
<div>
    @Model.Model.Welcome
</div>
Run Code Online (Sandbox Code Playgroud)

另一个部分视图名为_CreateModelB.cshtml

@model HelloModel

BBBBBBBB
<div>
    @Model.Model.Welcome
</div>
Run Code Online (Sandbox Code Playgroud)

最后,您可以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)
    {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个屏幕截图:

在此输入图像描述

  1. 但是,不建议将部分视图逻辑放入 PageModel 中。在页面文件中使用它如下所示要好得多:

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

    return new PartialViewResult()
    {
        ViewName = viewName,
        ViewData = ViewData,
        TempData = TempData
    };
}
Run Code Online (Sandbox Code Playgroud)