c# - 从 ASP.NET MVC 中的视图执行控制器 - Razor
问题描述
我正在尝试打印执行我的网络应用程序的用户的名称。它是用 MVC-Razor 编写的。
从初始视图中,我将执行以下控制器:
[Authorize]
public ActionResult Check()
{
var check = new CheckAD();
var user = new User {Name = check.CheckSecurityWithAD()};
if (!string.IsNullOrEmpty(user.Name))
{
return View("Checked", user);
}
var errors = new ErrorsModel()
{
Messages = new List<string>(){"You don't have permission"}
};
return View("Error", errors);
}
如果用户通过了正确的身份验证,此控制器将返回另一个视图:
@model UsersActivationWeb.Models.User
@{
ViewBag.Title = "Checked";
}
@{ <p> Logged come @Model.Name </p>};
如何使用控制器在第一个视图中打印第二个视图(我认为它是部分视图)?
谢谢
解决方案
听起来你需要一个Html.Action
. 这将运行控制器代码并显示在您调用时生成的视图内容。
您很可能需要这个重载,Html.Action(string actionName, string controllerName)
.
假设控制器被调用CheckController
。在您的初始视图中,这样称呼它
@Html.Action("Check","Check")
由于您不希望人们导航到Check
视图,您应该给它一个 ChildActionOnly 属性,所以它看起来像这样
[Authorize]
[ChildActionOnly]
public ActionResult Check()
{
//rest of code
}
最后,您几乎肯定不希望布局内容与 Checked 视图一起出现,因此将您的 Checked 视图更改为此
@model UsersActivationWeb.Models.User
@{
Layout = null;
}
@{ <p> Logged come @Model.Name </p>};
由于您在Check
操作中执行授权逻辑,因此您可能不需要该Authorize
属性。我这么说是因为没有登录的用户不会收到错误或他们的名字。也许你想要这个,我需要更多地了解你的代码才能确定。
这样,您将根据需要获取用户名或错误。
推荐阅读
- amazon-web-services - 无法运行 AWS CodeBuild 本地构建脚本
- c# - 如何用另一个列表中的项目替换文本中的字符串列表?
- amazon-web-services - Alexa - 无法识别调用名称
- mysql - 有没有办法在 Heroku 部署的应用程序上的jawsdb 中创建数据库和表?
- python - 使用 Python 时无法在 chrome 开发工具中提取正确的元素
- directx-12 - D3D12 ClearRenderTargetView
- php - 多维数组中的非法字符串偏移
- scala - 火花数据框正在从 csv 文件加载所有空值
- caching - 当 2 次命中 CloudFront 上的同一路径时的预期缓存行为
- c++ - 使用递归的字符串排列,分段错误