【问题标题】:Pass List<string> from ActionResult to partialview将 List<string> 从 ActionResult 传递到 partialview
【发布时间】:2013-01-23 10:03:18
【问题描述】:

我有一个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);}

在部分视图中,我有以下内容:

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


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

这会导致以下错误:

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

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    你不远,你只需要告诉视图期望什么类型的模型,例如

    @model System.Collections.Generic.List<string>
    
    <ul>
    @foreach (var item in Model)
    {
        <li>@item</li>
    }
    </ul>
    

    更新

    查看您的代码,您似乎对呈现视图和实际调用控制器操作的区别感到困惑。当您调用 Html.RenderPartial 时,您是在要求 MVC 直接呈现特定的 view,而不是调用控制器上的操作。 RenderPartial 期望第二个参数是该视图的模型(如果适用) - 您的视图期望 List&lt;string&gt; 但您传入的“Home”是一个字符串,这就是为什么您会遇到以下错误的原因:

    传入字典的模型项是“System.String”类型,但该字典需要一个“System.Collections.Generic.List`1[System.String]”类型的模型项

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

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

    【讨论】:

    • 嗨詹姆斯我收到以下错误消息=传递到字典中的模型项的类型为“System.String”,但该字典需要类型为“System.Collections.Generic.List”的模型项`1[System.String]'。
    • @CareerChange 您正在将“Home”作为模型传递给您的局部视图,您需要传递 Model 例如Html.Partial("Test", Model)。我认为您对尝试渲染局部视图(不会转到控制器)并实际调用控制器操作感到困惑。
    • 嗨詹姆斯这是我第 15 行:@{Html.RenderPartial("Test", Model);},也尝试了第 15 行:@{Html.Partial("Test", Model) );} 但得到的错误与我为 Aaron 和 Bennor 所写的错误相同
    • RenderAction 的返回类型为 void,您需要 @Html.Action("Test", "Home")。但是不要在你的“测试”视图中这样做,否则你会无限递归。
    • @BennorMcCarthy 好地方,我已经更新了我的答案。 OP 在 Index 视图中调用它,而不是在局部视图中。
    【解决方案2】:

    在局部视图的顶部定义

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

    在渲染局部视图的视图中添加

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

    【讨论】:

    • 嗨 Aaron 和 Bennor,我已经尝试过您所说的并收到以下错误:System.Web.Mvc.HtmlHelper' has no applicable method named 'Partial' 但似乎有扩展名该名称的方法。扩展方法不能动态调度。考虑强制转换动态参数或调用扩展方法而不使用扩展方法语法。
    • 奇数。您可能还需要将@model System.Collections.Generic.List&lt;string&gt; 放在索引视图的顶部。
    猜你喜欢
    • 1970-01-01
    • 2015-11-20
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 2017-06-18
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多