![](/img/trans.png)
[英]Model does not bind from _Footer.cshtml partial view in _Layout.cshtml page in razor pages
[英]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.