在 mvc4中如何向部分视图传递参数

我有一个这样的链接:

 <a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>

当我点击这个,它会调用这个部分页面:

 @{
switch ((string)ViewBag.Details)
{


case "Profile":
{
@Html.Partial("_Profile"); break;
}


}
}

部分 page _ Profile 包含:

Html.Action("Action", "Controller", model.Paramter)

例如:

@Html.Action("MemberProfile", "Member", new { id=1 })   // id is always changing

我的疑问是,我怎么能 将这个“ Id”传递给 model。参数部分

我的控制器是:

 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);
}
332135 次浏览

您的问题很难理解,但是如果我理解了大意,那么您只是希望在主视图中存取某些值,并在该视图中呈现部分内容。

如果只用部分名称呈现部分:

@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,那么可以在部分中引用相同的内容。

下面是一个将对象转换为 ViewDataDictionary 的扩展方法。

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从动态对象访问属性,而不是索引属性,例如。

<p>@ViewBag.Property1</p>
<p>@ViewBag.Property2</p>

当我在寻找自己的时候,我发现了一个最短的单值方法,就是像这样传递单个字符串并将字符串设置为模型。

在您的部分呼叫端

@Html.Partial("ParitalAction", "String data to pass to partial")

然后像这样用部分视图绑定模型

@model string

以及在部分视图中使用它的值,如下所示

@Model

您还可以使用其他数据类型,如 array、 int 或更复杂的数据类型,如 IDictionary 或其他类型。

希望能有所帮助,

对于 Asp. Net 核心,你最好使用

<partial name="_MyPartialView" model="MyModel" />

举个例子

@foreach (var item in Model)
{
<partial name="_MyItemView" model="item" />
}