将ActionResult中的List <string>传递给局部视图</string>

时间:2013-01-23 10:03:18

标签: c# asp.net-mvc

我有一个ActionResults,我希望将列表字符串传递给partialview,但我无法理解如何操作。

希望有人比我更聪明:-)可以帮助我解决它。

namespace Web.UI.Controllers
public ActionResult Index()
{
    return View();
}

public async Task<ActionResult> Test()
{
    var currentConditions   = await Task.Run(()=> _IGWC.CurrentConditions("194.61.173.5").FirstOrDefault());
    var weatherAstronomy    = await Task.Run(()=> _IGWC.WeatherAstronomy("194.61.173.5").FirstOrDefault());
    var weatherConditions   = await Task.Run(()=> _IGWC.WeatherConditions("194.61.173.5").FirstOrDefault());
    var weatherLocation     = await Task.Run(()=> _IGWL.WeatherSearch("194.61.173.5").FirstOrDefault());

    string test      = currentConditions.feelsLikeC.ToString();
    string test1     = weatherAstronomy.sunRise.ToString();
    string test2     = weatherConditions.maxtempC.ToString();
    string test3     = weatherLocation.DisplayAreaName.ToString();

    List<string> weatherData = new List<string>();
    weatherData.Add(test);
    weatherData.Add(test1);
    weatherData.Add(test2);
    weatherData.Add(test3);

    return PartialView(weatherData);
}

在我的索引视图中包含我的部分视图:

@{Html.Partial("Test","Home");}

最后在我的部分视图中,我尝试使用以下内容。

What goes here

@foreach (var item in Model)
{
@item.
}

如何从weatherData获取值并传递给partialview,我发现它工作的唯一方法是使用tempdata,但我不想沿着那条路走下去。

---------------------------代码更新------------------ ----

在索引视图中,我按要求添加了以下内容:

  @model System.Collections.Generic.List<string>

@{Html.Partial("Test", Model);}

在partialview中,我有以下内容:

@model System.Collections.Generic.IEnumerable<string>


<ul>
@foreach (var item in Model)
{
    <li>@item</li>
}
</ul>

现在导致以下错误:

Message =对象引用未设置为对象的实例。由@foreach(模型中的var项)

引起的

2 个答案:

答案 0 :(得分:1)

你不远处,你只需要告诉你想要什么类型的模型,例如。

@model System.Collections.Generic.List<string>

<ul>
@foreach (var item in Model)
{
    <li>@item</li>
}
</ul>

<强>更新

查看代码时,您似乎对渲染视图与实际调用控制器操作的区别感到困惑。当您调用Html.RenderPartial时,您要求MVC直接呈现该特定视图,而不是调用控制器上的操作。 RenderPartial期望第二个参数是该视图的模型(如果适用) - 您的视图期望List<string>但您传入“Home”这是一个字符串,这就是您收到错误的原因沿着这条线:

  

传递到字典中的模型项是'System.String'类型,但是这个字典需要一个类型为'System.Collections.Generic.List`1 [System.String]'的模型项

您需要做的是实际调用操作并渲染结果视图,例如。

@{ Html.RenderAction("Test", "Home"); }

答案 1 :(得分:0)

在局部视图的顶部定义

@model System.Collections.Generic.List<string>

在您的视图中渲染部分视图添加

@{Html.Partial("Test", Model);}