美好的一天。我在开发asp.net core mvc应用程序时遇到了问题。 事实上,我有一个仪表板页面,其数据取自@model DashboardPageViewModel。另外,在每个页面上我都有一个导航栏组件,其中有一个用户昵称,该昵称也取自@model UserViewModel。 但系统每页只允许上传一个模型。告诉我如何解决这个问题
我尝试在课堂上结合使用模型,但它们来自太不同的领域。导航栏出现在每个页面上。
1.一种快速方法是您可以创建一个新的 ViewModel,它结合了
DashboardPageViewMode
l 和 UserViewModel
的属性。
型号
public class DashboardViewModel
{
public DashboardPageViewModel DashboardData { get; set; }
public UserViewModel UserData { get; set; }
}
然后使用
Partial View
/View Component
重用该组件。
查看
@model DashboardViewModel
<header>
@Html.Partial("_Navbar", Model.UserData)
</header>
<!-- Access DashboardPageViewModel properties -->
<h2>@Model.DashboardData.Title</h2>
2.如果用户相关数据在多个页面中是通用的,您可以从服务中检索它。创建一个提供用户相关数据(例如用户昵称)的服务,并将该服务注入到您的仪表板页面和导航栏组件中。这样,两个组件都可以独立访问必要的数据。
服务
public interface IUserService
{
string GetUserNickname();
}
public class UserService : IUserService
{
public string GetUserNickname()
{
// Logic to retrieve user nickname from database or elsewhere
//just for easy demo sharing
return "User123";
}
}
程序.cs
builder.Services.AddScoped<IUserService, UserService>();
将服务注入部分视图/视图组件
@inject IUserService UserService
@{
var userNickname = UserService.GetUserNickname();
}
<div>
<span>Welcome, @userNickname!</span>
<!-- Other Navbar content -->
</div>
3.尽管不建议在复杂场景中使用,但您可以使用
ViewData
或 ViewBag
将附加数据从控制器/Razor 页面传递到视图。然而,这种方法可能会导致代码的可维护性较差,因此应谨慎使用。