如何将模型传递给 razor 页面中 _Layout.cshtml 页面的局部视图
How to pass a model to a partial view in _Layout.cshtml page in razor pages
我目前正在 Razor 页面中开发 Web 应用程序并且遇到了困难。
问题是我在每个页面上都有一个 bootstrap 模态表单用于注册。所以我决定将它作为局部视图并将其包含在我的 _Layout 页面中,以便它出现在每个页面上。但问题是我如何将模型(此处:RegisterModel)传递给它。经过一番研究,我找到了以下解决方案。
创建一个基础 class(此处:MyPageModel.cs),它继承了 PageModel 并包含一个 public 属性 引用我想要的模型。然后在我的所有页面中继承此 class 代替 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方法被调用时模型状态returns无效,因为之前绑定了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; }
}
这是我的 RegisterModel
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))
{
...
}
我目前正在 Razor 页面中开发 Web 应用程序并且遇到了困难。
问题是我在每个页面上都有一个 bootstrap 模态表单用于注册。所以我决定将它作为局部视图并将其包含在我的 _Layout 页面中,以便它出现在每个页面上。但问题是我如何将模型(此处:RegisterModel)传递给它。经过一番研究,我找到了以下解决方案。
创建一个基础 class(此处:MyPageModel.cs),它继承了 PageModel 并包含一个 public 属性 引用我想要的模型。然后在我的所有页面中继承此 class 代替 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方法被调用时模型状态returns无效,因为之前绑定了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; }
}
这是我的 RegisterModel
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))
{
...
}