我有这样的链接:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
当我点击它时,它将调用此部分页面:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
部分页面_Profile包含:
Html.Action("Action", "Controller", model.Paramter)
示例:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
我怀疑的是,我如何将此“Id”传递给model.parameter part ?
我的控制器是:
public ActionResult MemberHome(string id)
{
ViewBag.Details = id;
return View();
}
public ActionResult MemberProfile(int id = 0)
{
MemberData md = new Member().GetMemberProfile(id);
return PartialView("_ProfilePage",md);
}
答案 0 :(得分:321)
你的问题很难理解,但是如果我得到了要点,你只需要在主视图中有一些值,你想要在该视图中部分渲染。
如果只使用部分名称渲染部分:
@Html.Partial("_SomePartial")
它实际上会将您的模型作为隐式参数传递,就像您调用它一样:
@Html.Partial("_SomePartial", Model)
现在,为了让你的部分实际上能够使用它,它也需要有一个已定义的模型,例如:
@model Namespace.To.Your.Model
@Html.Action("MemberProfile", "Member", new { id = Model.Id })
或者,如果您正在处理视图模型上没有的值(它位于ViewBag中或视图中生成的值,那么您可以传递ViewDataDictionary
@Html.Partial("_SomePartial", new ViewDataDictionary { { "id", someInteger } });
然后:
@Html.Action("MemberProfile", "Member", new { id = ViewData["id"] })
与模型一样,默认情况下,Razor会隐式传递您的部分视图ViewData
,因此如果您的视图中有ViewBag.Id
,那么您可以在部分中引用相同的内容。
答案 1 :(得分:31)
我在寻找自己的时候找到单值的最短方法之一,只是传递单个字符串并将字符串设置为视图中的模型。
在您的部分主叫方
@Html.Partial("ParitalAction", "String data to pass to partial")
然后将模型与Partial View绑定,就像这样
@model string
并在Partial View中使用它的值
@Model
您还可以使用其他数据类型,如array,int或更复杂的数据类型,如IDictionary或其他类型。
希望它有所帮助,
答案 2 :(得分:11)
这是一个将对象转换为ViewDataDictionary的扩展方法。
add new user
然后您可以在视图中使用它,如下所示:
public static ViewDataDictionary ToViewDataDictionary(this object values)
{
var dictionary = new ViewDataDictionary();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(values))
{
dictionary.Add(property.Name, property.GetValue(values));
}
return dictionary;
}
哪个比@Html.Partial("_MyPartial", new
{
Property1 = "Value1",
Property2 = "Value2"
}.ToViewDataDictionary())
语法好得多。
然后在局部视图中,您可以使用new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
从动态对象而不是索引属性访问属性,例如。
ViewBag
答案 3 :(得分:0)
对于Asp.Net核心,您最好使用
<partial name="_MyPartialView" model="MyModel" />
例如
@foreach (var item in Model)
{
<partial name="_MyItemView" model="item" />
}