【问题标题】:How to pass a model to a partial view in _Layout.cshtml page in razor pages如何将模型传递给剃须刀页面中_Layout.cshtml页面中的部分视图
【发布时间】:2021-09-10 06:03:57
【问题描述】:

我目前正在 Razor 页面中开发一个 Web 应用程序,但遇到了困难。

问题是我在每个页面上都有一个用于注册的引导模式表单。所以我决定将它作为一个局部视图,并将它包含在我的 _Layout 页面中,以便它出现在每个页面上。但问题是我如何将模型(此处:RegisterModel)传递给它。经过一番研究,我找到了以下解决方案。

​

创建一个基类(此处为: MyPageModel.cs ),它继承 PageModel 并包含一个引用我想要的模型的公共属性。然后在我的所有页面中继承这个类来代替 PageModel。但问题是,现在我在每个剃须刀页面上都绑定了 RegisterModel。

 public class MyPageModel : PageModel
    {
        [BindProperty]
        public RegisterModel RegisterModel { get; set; }

        public async Task<IActionResult> OnPostRegisterAsync()
        {

            if (ModelState.IsValid)
            {

                RegisterModel emailData = new()
                {
                    FirstName = RegisterModel.FirstName,
                    LastName = RegisterModel.LastName,
                    Mobile = RegisterModel.Mobile,
                    Email = RegisterModel.Email,
                    PreferredStream = RegisterModel.PreferredStream,
                    ProgramType = RegisterModel.ProgramType,
                    Board = RegisterModel.Board,
                    DistantLearning = RegisterModel.DistantLearning
                };

                int response = await SendFluentEmail.Send(emailData);

                return Content(response.ToString());
            }
            else
            {
                return Page();
            }

        }
    }

例如,我有一个联系我们页面,我在其中使用了不同的模型。但是当这个页面的 post 方法被调用时,模型状态返回无效,因为之前绑定了 RegisterModel。

​

public class contact_usModel : MyPageModel
    {
        [BindProperty]
        public ContactModel contact { get; set; }


        public IActionResult OnGet()
        {
            return Page();
        }

      
        public async Task<IActionResult> OnPostContactAsync()
        {
            
            if (ModelState.IsValid)
            { 

                ContactModel sendData = new()
                {
                    FirstName = contact.FirstName,
                    LastName = contact.LastName,
                    Email = contact.Email,
                    Subject = contact.Subject,
                    Message = contact.Message
                };

                int response  = await SendFluentEmail.Send(sendData);

                return Content(response.ToString());
            }
            else
            {
                return Page();
            }

        }
    }

这就是我将模型传递到 _Layout 页面中的局部视图的方式。

<partial name="_RegisterModalView" model="Model.RegisterModel" />

这是我的联系人模型

public class ContactModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Subject { get; set; }
        public string Message { get; set; }
    }

这是我的注册模型

public class ContactModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Mobile { get; set; }
        public string PreferredStream { get; set; }
        .
        .
        .
    }

那么我该如何解决这个问题呢?请帮忙。

【问题讨论】:

  • 为什么不能有不同的基本页面模型?

标签: c# asp.net asp.net-core .net-core razor-pages


【解决方案1】:

如果要验证ContactModel,可以尝试使用TryValidateModel:

 if (TryValidateModel(contact))
    {
        ...
    }

如果还是不行,试试这个:

ModelState.Clear();
if (TryValidateModel(contact))
{
    ...
}

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2019-06-05
    • 2018-04-24
    • 1970-01-01
    • 2020-01-26
    • 2019-05-09
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多