Asp.Net MVC 5如何将ViewBag发送到部分视图

5 asp.net-mvc asp.net-mvc-5

我有一个_LoginPartial View,想要通过ViewBag向它发送数据,但是我发送数据的Controller没有View.

public PartialViewResult Index()
    {
        ViewBag.sth = // some data
        return PartialView("~/Views/Shared/_LoginPartial.cshtml");
    }
Run Code Online (Sandbox Code Playgroud)

这段代码对我不起作用.

Chr*_*att 7

Index当你这样做时,你似乎期待这个动作被调用:@Html.Partial('_LoginPartial').这永远不会发生.Partial使用当前视图的上下文通过Razor运行局部视图并吐出生成的HTML.

如果您需要部分的其他信息,可以指定自定义ViewDataDictionary:

@Html.Partial("_LoginPartial", new ViewDataDictionary { Foo = "Bar" });
Run Code Online (Sandbox Code Playgroud)

然后您可以在部分通道内访问:

ViewData["Foo"]
Run Code Online (Sandbox Code Playgroud)

您还可以使用子操作,如果使用不需要主视图上下文的局部视图,通常更可取._LoginPartial虽然我不确定你是如何使用它的,但它似乎是一个很好的候选人.但具有讽刺意味的是,_LoginPartial带有单独身份验证的默认MVC项目附带的视图使用子操作.

基本上,您拥有的代码已经可以使用,您只需要通过使用Html.Action而不是Html.Partial:来改变引用它的方式:

@Html.Action("Index")
Run Code Online (Sandbox Code Playgroud)

请注意,您在此处调用操作,现在调用视图.

  • 这对我有用'@ Html.Partial("_ LoginPartial",新的ViewDataDictionary {{"Foo","Bar"},{"Foo2","Bar2"}}) (4认同)

Sho*_*hoe 0

您始终可以将数据直接传递到部分视图。

public PartialViewResult Index()
{
    var data = // some data
    return PartialView("~/Views/Shared/_LoginPartial.cshtml", data);
}
Run Code Online (Sandbox Code Playgroud)

传递多条数据

public class MyModel
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}

public PartialViewResult Index()
{
    var data = new MyModel(){ Prop1 = 5, Prop2 = 10 };
    return PartialView("~/Views/Shared/_LoginPartial.cshtml", data);
}
Run Code Online (Sandbox Code Playgroud)

  • 在问题的上下文中,答案不正确。确实,您可以使用模型传递数据。但问题是Viewbag中传递数据 (2认同)