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

27 浏览
0 Comments

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

我有一个像这样的链接:\n

 个人资料

\n当我点击它时,它会调用这个局部页面:\n

 @{
    switch ((string)ViewBag.Details)
    {
        case "Profile":
        {
           @Html.Partial("_Profile"); break;
        }
    }
}

\n局部页面 _Profile 包含:\n

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

\n例如:\n

@Html.Action("MemberProfile", "Member", new { id=1 })   // id 会不断变化

\n我的疑问是如何将这个 \"Id\" 传递给 model.parameter 部分?\n我的控制器是:\n

 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
0 Comments

在MVC 4中,有一个问题是如何将参数传递给部分视图。为了解决这个问题,可以使用一个扩展方法将对象转换为ViewDataDictionary,然后在视图中使用这个方法。

首先,需要创建一个静态类,并在其中定义一个名为ToViewDataDictionary的扩展方法。该方法接受一个object类型的参数,并将其转换为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;
}

然后,在视图中使用这个方法来传递参数给部分视图。具体用法如下:

.Partial("_MyPartial", new
{
    Property1 = "Value1",
    Property2 = "Value2"
}.ToViewDataDictionary())

这样做比使用new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}更简洁。

在部分视图中,可以使用ViewBag来访问动态对象的属性,而不是使用索引属性。例如:

<p>.Property1</p>
<p>.Property2</p>

至于ToViewDataDictionary这个静态方法应该放在哪里,它是一个扩展方法,只需要将它放在一个静态类中,并在视图中引用这个类即可。

0
0 Comments

在MVC 4中,有人提出了如何在部分视图中传递参数的问题。他们尝试了一种简单的方法,通过将参数作为字符串传递给部分视图,并将其设置为视图的模型。同时,他们还提到了可以使用其他数据类型,如数组、整数或更复杂的数据类型,例如IDictionary等。然而,有人遇到了一个问题,他们在部分视图中访问Model时遇到了NullReferenceException错误,提示Model为null。他们试图解决这个问题,但最终还是创建了一个简单的部分视图模型来绕过这个问题。

解决方法:

在部分视图调用的地方,将参数作为字符串传递给部分视图,并将其设置为视图的模型。

.Partial("PartialAction", "String data to pass to partial")

然后,在部分视图中绑定模型,并使用它的值。

@model string

这样,就可以在部分视图中访问模型的值了。

虽然有人遇到了一个问题,即将视图模型传递给部分视图时,部分视图期望的是一个字符串,而不是一个视图模型。为了解决这个问题,他们创建了一个简单的部分视图模型,其中包含一个文本属性,并将其传递给部分视图。

这种方法在保留ViewData和ModelState的同时,通过传递参数给部分视图,可以在部分视图中访问和使用这些数据。这对于部分视图不需要模型,但需要保留ViewData和ModelState的情况非常有用。

希望这能帮到你,这是我想要的。谢谢。

在MVC 4中,有人提出了如何在部分视图中传递参数的问题。他们尝试了一种简单的方法,通过将参数作为字符串传递给部分视图,并将其设置为视图的模型。然而,有人遇到了一个问题,即将视图模型传递给部分视图时,部分视图期望的是一个字符串,而不是一个视图模型。为了解决这个问题,他们创建了一个简单的部分视图模型,其中包含一个文本属性,并将其传递给部分视图。这种方法在保留ViewData和ModelState的同时,通过传递参数给部分视图,可以在部分视图中访问和使用这些数据。这对于部分视图不需要模型,但需要保留ViewData和ModelState的情况非常有用。

0
0 Comments

问题的原因是在主视图中有一个值,需要在渲染的局部视图中访问。解决方法是使用.Partial("_SomePartial")来渲染局部视图,并将主视图中的模型作为隐式参数传递给局部视图。而局部视图需要有一个定义的模型才能使用这个传递过来的值。如果要处理的值不在主视图的模型中(而是在ViewBag或者视图本身中生成的值),那么可以使用ViewDataDictionary来传递这个值给局部视图,并在局部视图中使用ViewData["id"]来引用这个值。如果主模型实现了一个接口,那么局部视图可以使用这个接口作为模型,从而实现较多的重用。

0