C# 在视图构件或局部视图中使用表单

C# 在视图构件或局部视图中使用表单,c#,asp.net-core,partial-views,razor-pages,asp.net-core-viewcomponent,C#,Asp.net Core,Partial Views,Razor Pages,Asp.net Core Viewcomponent,我正在使用.NETCore框架,其中包含没有MVC的razor页面,我正在尝试将表单与视图组件集成,以使其可重用 问题是我注意到它并不是为你量身定做的。实际上,我使用asp作为表单的属性,该属性实际上是基于父PageModel的,在父PageModel中,我绑定了一个与表单字段对应的属性 我想知道如何创建包含表单的可重用组件,以便在最终的页面模型中使用 谢谢:)如果要使局部视图可重用,这意味着只能调用一个模型 是否要使用局部视图,并从不同的模型获取数据 然后,您可以使用视图模型包含多个不同的模型

我正在使用.NETCore框架,其中包含没有MVC的razor页面,我正在尝试将表单与视图组件集成,以使其可重用

问题是我注意到它并不是为你量身定做的。实际上,我使用asp作为表单的属性,该属性实际上是基于父PageModel的,在父PageModel中,我绑定了一个与表单字段对应的属性

我想知道如何创建包含表单的可重用组件,以便在最终的页面模型中使用


谢谢:)

如果要使局部视图可重用,这意味着只能调用一个模型

是否要使用局部视图,并从不同的模型获取数据

然后,您可以使用视图模型包含多个不同的模型,如:

public class MyViewModel
{
    public Profile Profile { get; set; }
    public Job Job { get; set; }
}
public class Profile
{      
    public string Name { get; set; }
}
//....other models
Index.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(model=用于将模型传递给partial):


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

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

所有web框架都将标准HTML、CSS、Javascript和WASM推送到浏览器中。没有理由不能创建普通的旧输入元素并将表单发布到控制器。控制器的模型绑定器将尝试使用这些字段,或者您也可以作为表单值访问数据;这就是问题所在,我希望我有一个解决方法,我认为您不应该使用asp for属性,因此将数据作为参数获取,但文档对此主题的信息不是很丰富。为了更清楚,我只希望能够将视图组件内表单的asp for属性绑定到父类的属性ModelPage通过[BindProperty]我开始寻找一条轨迹,但它不是超级清晰的,确实有效。事实上,我试图直接传递一个字符串,但无法。我是这个框架的新手,所以我仍然对一些原则感到困惑。但是,如果您想对视图组件执行相同的操作,我建议您阅读本文,因为在同一页面中使用多个组件时会发生冲突。
@model tr4cks491.Models.MyViewModel
<form method="post">
    <input asp-for="Job.Name" />
    <input asp-for="Profile.Name" />
    <input type="submit" value="Submit" />
</form>