Javascript mvc在布局页面中使用变量,而不是其字符串值

Javascript mvc在布局页面中使用变量,而不是其字符串值,javascript,asp.net,asp.net-mvc,asp.net-mvc-4,razor,Javascript,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,这可能是一个n00b问题,我试图在我的MVC\U布局页面中获取一个字符串变量 到目前为止我有 编辑: 我需要在页面上多次显示myVariable。因此,我需要将其存储在某个位置,而不是调用 @Url.ActionGetUserName,UserController; 多次 在mvc中有这样做的方法吗 编辑2: 我曾经 字符串myVariable=ViewBag.GetUserName 在哪里 在我的BaseController中,我有 当我运行我的项目时, 无法对空引用执行运行时绑定是否尝试使用

这可能是一个n00b问题,我试图在我的MVC\U布局页面中获取一个字符串变量

到目前为止我有

编辑:

我需要在页面上多次显示myVariable。因此,我需要将其存储在某个位置,而不是调用 @Url.ActionGetUserName,UserController; 多次

在mvc中有这样做的方法吗

编辑2:

我曾经 字符串myVariable=ViewBag.GetUserName 在哪里

在我的BaseController中,我有

当我运行我的项目时,
无法对空引用执行运行时绑定

是否尝试使用razor

<input type="hidden" value="@myVariable" id='hidden-username'/>
类似地,您可以将其绑定到接受其值的任何其他对象:

<label id='lbl-username'>@myVariable</label>
<input type="text" value="@myVariable" />
CSHTMLView:

@model  YourProject.YourPortal.Web.ViewModels.YourPageModel

 <label id='lbl-username'>@Model.UserName</label>

我认为您想要的是在控制器操作中调用该操作,并使用结果。可以将值作为模型传递给视图,也可以通过ViewBag传递

public ActionResult MyAction()
{
    var userName = new UserController().GetUserName();

    return View(userName);
    //OR
    ViewBag.UserName = userName;
    return View();
}
或者,如果要在_Layout.cshtml中使用,请在UserController:BaseController中创建子操作

    [ChildActionOnly]
    public ActionResult UserName()
    {
        return new ContentResult { Content = "Mark ZuckerBerg" };
    }
并调用_Layout.cshtml

    @{Html.Action("UserName", "User")}

您实际要生成的url是什么?您想要User/GetUserName/someUserName吗?和它的用户,而不是用户控制器。在任何情况下,为什么要先将其分配给c变量它可以是var testName='@Url.Action…';我没有尝试获取字符串值,我需要调用URL的结果。var testName='Mark Zuckerberg'然后您需要调用controller方法。Action是一种生成Url的方法,它实际上并不调用它。但是为什么您的用户名的值在视图中不可用?您需要提供更多的上下文来理解您真正想要做的事情,我只需要在这里使用MVC调用它,因为我希望在加载任何javascript之前加载值。然后你需要对该控制器方法进行ajax调用,以获取它返回的值。你能告诉我@myVariable将如何获取其值控制器或任何其他方式吗?我建议将页面绑定到模型,从这里,您可以绑定调用模型来使用变量。如果你想的话,我可以给你举个例子。除了模型之外,还有其他方法吗?我想有一些方法,但要复杂得多,比如通过ajax调用加载所有内容,并将其附加到加载时用户名的倍数中。最好的方法是将视图绑定到viewmodel。如果您需要了解如何使用模型绑定,我已经添加了一个简单的示例,您可以从中开始。我尝试了这个示例,但UserController此时为null,我认为_布局首先得到初始化。您是在控制器操作方法中还是直接在_layout.cshtml文件中尝试了这个示例?我建议在控制器操作中执行此操作,然后将值传递给view.doing ViewBag.UserName=UserName;在布局页面中引用@ViewBag.UserName会生成一个空白结果,在操作结果之前调用布局。已经用另一种方法编辑了答案。它有效!最后我试过你的答案。真不敢相信MVC会把这么简单的东西变成这么复杂的东西
@model  YourProject.YourPortal.Web.ViewModels.YourPageModel

 <label id='lbl-username'>@Model.UserName</label>
public ActionResult MyAction()
{
    var userName = new UserController().GetUserName();

    return View(userName);
    //OR
    ViewBag.UserName = userName;
    return View();
}
    [ChildActionOnly]
    public ActionResult UserName()
    {
        return new ContentResult { Content = "Mark ZuckerBerg" };
    }
    @{Html.Action("UserName", "User")}