首页 > 解决方案 > 在视图组件或局部视图中使用表单

问题描述

我正在使用带有没有 MVC 的剃须刀页面的 .net 核心框架,并且我正在尝试将表单与视图组件集成以使其可重用。

问题是我注意到它并不是真正适合的。实际上,我使用表单的asp-for属性,该属性实际上基于父PageModel,我在其中绑定了与表单字段对应的属性。

我想知道如何创建包含要在最终PageModel中使用的表单的可重用组件。

谢谢 :)

标签: c#asp.net-corepartial-viewsrazor-pagesasp.net-core-viewcomponent

解决方案


如果你想让你的局部视图可重用,这意味着只应该调用一个模型。

你想使用局部视图,并从不同的模型中获取数据吗?

然后您可以使用ViewModel来包含多个不同的模型,例如:

public class MyViewModel
{
    public Profile Profile { get; set; }
    public Job Job { get; set; }
}
public class Profile
{      
    public string Name { get; set; }
}
//....other models

索引.cshtml.cs:

[BindProperty]
    public MyViewModel MyViewModel { get; set; }

    public void OnGet()
    {
        MyViewModel = new MyViewModel
        {
            Job = new Job { Name = "teacher" },
            Profile=new Profile {Name="Peter"}          
        };
    }

Index.cshtml(模型=用于将模型传递给部分):

<partial name="~/Pages/Shared/Partialview.cshtml" model="Model.MyViewModel" />

然后就可以在 Partial 视图中获取相关模型数据:

@model tr4cks491.Models.MyViewModel
<form method="post">
    <input asp-for="Job.Name" />
    <input asp-for="Profile.Name" />
    <input type="submit" value="Submit" />
</form>

推荐阅读