在不重复代码的情况下在局部视图中传递全局数据
passing global data in partial views without duplicating code
我有一个应用程序需要显示当前用户的用户名和图像。我可以将数据拉入视图模型并显示在视图中,但这意味着我需要在使用视图的每个控制器中执行此操作。有没有一种方法可以全局设置值并调用某些局部视图,而不必在每个控制器中重复复制它?
在我看来,您需要从 _Layout.cshtml 调用子操作。这是它的样子。
首先根据你所说的,我假设你的 viewModel 是这样的
public class UserDisplayViewModel
{
public string UserName { get; set; }
public string ImageUrl { get; set; }
}
您将需要一个负责获取用户名和图像数据的控制器。
它看起来像这样
public class UserController : Controller
{
[ChildActionOnly]
public ActionResult _userDisplay()
{
var viewModel = GetUserNameAndImage();
return View(viewModel);
}
private UserDisplayViewModel GetUserNameAndImage()
{
//code for getting the username and image data
}
}
您可以像这样从 _layout.cshtml 文件中调用子操作
@Html.Action("_userDisplay", "User")
您希望用户名和图片出现在 HTML 中的任何位置。
您还需要一个名为 _userDisplay.cshtml 的局部视图,其中包含您希望如何显示用户名和图像的标记。这是一个非常基本的例子
@model UserDisplayViewModel
@{
Layout = null;
}
<p>
Username: @Model.UserName
</p>
<p>
<img src="@Model.ImageUrl"/>
</p>
我有一个应用程序需要显示当前用户的用户名和图像。我可以将数据拉入视图模型并显示在视图中,但这意味着我需要在使用视图的每个控制器中执行此操作。有没有一种方法可以全局设置值并调用某些局部视图,而不必在每个控制器中重复复制它?
在我看来,您需要从 _Layout.cshtml 调用子操作。这是它的样子。
首先根据你所说的,我假设你的 viewModel 是这样的
public class UserDisplayViewModel
{
public string UserName { get; set; }
public string ImageUrl { get; set; }
}
您将需要一个负责获取用户名和图像数据的控制器。
它看起来像这样
public class UserController : Controller
{
[ChildActionOnly]
public ActionResult _userDisplay()
{
var viewModel = GetUserNameAndImage();
return View(viewModel);
}
private UserDisplayViewModel GetUserNameAndImage()
{
//code for getting the username and image data
}
}
您可以像这样从 _layout.cshtml 文件中调用子操作
@Html.Action("_userDisplay", "User")
您希望用户名和图片出现在 HTML 中的任何位置。
您还需要一个名为 _userDisplay.cshtml 的局部视图,其中包含您希望如何显示用户名和图像的标记。这是一个非常基本的例子
@model UserDisplayViewModel
@{
Layout = null;
}
<p>
Username: @Model.UserName
</p>
<p>
<img src="@Model.ImageUrl"/>
</p>