如何将参数传递给mvc 4中的局部视图

时间:2013-12-27 11:10:54

标签: asp.net-mvc asp.net-mvc-4 razor partial-views

我有这样的链接:

 <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);
    }

4 个答案:

答案 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" />
}