我有一个_LoginPartial View,想要通过ViewBag向它发送数据,但是我发送数据的Controller没有View.
public PartialViewResult Index()
{
ViewBag.sth = // some data
return PartialView("~/Views/Shared/_LoginPartial.cshtml");
}
Run Code Online (Sandbox Code Playgroud)
这段代码对我不起作用.
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)
请注意,您在此处调用操作,现在调用视图.
您始终可以将数据直接传递到部分视图。
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)
| 归档时间: |
|
| 查看次数: |
17228 次 |
| 最近记录: |