Asp.NetCoreMVC7C # -从具有多个窗体和状态的页向控制器传递数据和从控制器传递数据的推荐方法

e5nqia27  于 2023-02-14  发布在  .NET
关注(0)|答案(1)|浏览(165)

我正在VS 2022中使用.Net Core 7 MVC模板构建一个简单的Web门户(很难知道这是否是最新推荐的格式和a或模板,微软没有真正从堆栈的Angular 说明当前的方法是什么)。
作为构建和专注于MVC的一部分,我研究了PageModels是否是绑定到页面的推荐方法,或者使用简单的模型并使用剃刀语法(这是我的首选)填充页面是否是最现代的推荐方法(同样,Microsoft文档也没有具体说明)。
除此之外,我遇到的具体问题是,我正在构建一个具有许多不同表单的设置页面,我最初认为,为了维护其他输入和字段的页面状态,当表单向控制器发送时,它会发送填充了表单绑定属性的整个页面模型,执行一些逻辑,并将修改后的模型传回主索引ActionMethod。然而,我看不出关于将剃刀页面作为单个表单提交的一部分使用的整个模型传回的任何具体内容。此外,这是否是一个好主意。
页面结构如下所示。

  • 表格-团队名称
  • 按钮-提交,仅保存团队名称。
  • 列表-团队中当前的团队成员。
  • 表单-通过电子邮件搜索用户。
  • 列表-与搜索输入匹配的用户列表,按钮指向Add To Team

我遇到的问题是,如果我从搜索输入中传递回绑定到模型的表单属性,我将无法获得用于填充当前团队成员列表的所有其他模型属性,或者团队名称。所以我想这将意味着控制器必须再次完成获取数据的工作?在我看来,这似乎有点低效。我我假设有一个聪明的方法可以做到这一点,并取得适当的结果,但我很难看到光明通过黑暗与这个特殊的考虑。任何建议或点头在正确的方向是赞赏。

示例模型

public class SettingsPageModel
{
    public SettingsPageModel() { }

    public SettingsPageModel(string teamName)
    {
        TeamName = teamName;
    }

    public SettingsPageModel(SearchModel searchModel)
    {
        SearchModel = searchModel;
    }

    public SettingsPageModel(string teamName, List<TeamMember> teamMembers, SearchModel searchModel)
    {
        TeamName = teamName ?? throw new ArgumentNullException(nameof(teamName));
        TeamMembers = teamMembers ?? throw new ArgumentNullException(nameof(teamMembers));
        SearchModel = searchModel ?? throw new ArgumentNullException(nameof(searchModel));
    }

    public string TeamName { get; set; } = string.Empty;
    public List<TeamMember> TeamMembers { get; set; } = new();
    public SearchModel SearchModel { get; set; } = new();
    public DialogModel? DialogModel { get; set; }
}

public class SearchModel
{
    public string? SearchTerm { get; set; }
    public List<User>? SearchedUsers { get; set; }
}
vdzxcuhz

vdzxcuhz1#

每次提交表单时,只返回表单上的输入元素(而不是整个模型)。
如果您有搜索输入,并且只想更新页面的一部分,则必须执行以下操作之一:

  • 向表单添加更多隐藏的输入字段,以发送TeamName等信息并完全填充模型(不理想)
  • 在提交表单时使用 AJAX ,在控制器中有一个Action,用于获取过滤后的用户并返回一个PartialView()和用户列表,在获得Ajax响应(HTML)时使用JavaScript更新DOM

相关问题