首页 > 解决方案 > 从 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>};

如何使用控制器在第一个视图中打印第二个视图(我认为它是部分视图)?

谢谢

标签: c#.netasp.net-mvcrazor

解决方案


听起来你需要一个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属性。我这么说是因为没有登录的用户不会收到错误或他们的名字。也许你想要这个,我需要更多地了解你的代码才能确定。

这样,您将根据需要获取用户名或错误。


推荐阅读