首页 > 解决方案 > 从剃刀页面处理程序返回部分视图

问题描述

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

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

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

} 

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

标签: asp.net-corerazor-pages

解决方案


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

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

在这里,我使用 aViewData.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)
    {
        // ...
    }
}

这是一个屏幕截图:

在此处输入图像描述

  1. 但是,不建议将局部视图逻辑放在 PageModel 中。在下面的页面文件中使用它会更好:

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


推荐阅读