簡體   English   中英

如何在剃刀頁面中將模型傳遞給_Layout.cshtml 頁面中的局部視圖

[英]How to pass a model to a partial view in _Layout.cshtml page in razor pages

我目前正在 Razor 頁面中開發一個網絡應用程序並且遇到了問題。

問題是我在每個頁面上都有一個用於注冊的 bootstrap Modal 表單。 所以我決定將它作為局部視圖並將其包含在我的 _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" />

這是我的 ContactModel

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; }
        .
        .
        .
    }

那么我該如何解決這個問題呢? 請幫忙。

如果你想驗證 ContactModel,你可以嘗試使用TryValidateModel

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

如果還是不行,試試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM