Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ASP.NET MVC中的MVC上动态显示字符串/布尔值对的名称和值列表_Asp.net Mvc_Asp.net Mvc 3_Partial Views - Fatal编程技术网

Asp.net mvc 如何在ASP.NET MVC中的MVC上动态显示字符串/布尔值对的名称和值列表

Asp.net mvc 如何在ASP.NET MVC中的MVC上动态显示字符串/布尔值对的名称和值列表,asp.net-mvc,asp.net-mvc-3,partial-views,Asp.net Mvc,Asp.net Mvc 3,Partial Views,我需要根据用户选择在MVC view*.cshtml上动态显示字符串/布尔对的名称和值列表。具体来说,字符串和布尔对的名称和值在每个列表中都是不同的。用户可以选择多个列表。例如: 水果名:苹果串:苹果串 IsRipen:真字符串:布尔值 书名:C 伊索尔德:错 一种列表类型定义为一种报告类型。可以通过编程方式从报表中检索列表 可能的解决办法1 由于列表中名称和值的数据类型是固定字符串、布尔值,因此一个想法是将集合构建为MVC模型,并将该模型传递给MVC razor视图。问题是如何在视图上显示名称

我需要根据用户选择在MVC view*.cshtml上动态显示字符串/布尔对的名称和值列表。具体来说,字符串和布尔对的名称和值在每个列表中都是不同的。用户可以选择多个列表。例如:

水果名:苹果串:苹果串

IsRipen:真字符串:布尔值

书名:C

伊索尔德:错

一种列表类型定义为一种报告类型。可以通过编程方式从报表中检索列表

可能的解决办法1 由于列表中名称和值的数据类型是固定字符串、布尔值,因此一个想法是将集合构建为MVC模型,并将该模型传递给MVC razor视图。问题是如何在视图上显示名称

@Html.LabelFor(model => model.Names[0])  //how to display it as 'Fruit Name'
可能的解决办法2 在ASP.NET web表单中,存在可以动态加载的用户控件。ASP.NET MVC中存在部分视图。局部视图能满足我的要求吗?还是有更好的解决办法


我是MVC新手,任何理想或示例都会非常受欢迎。

如果我理解正确,您要做的是创建一个局部视图,并使用控制器中的操作调用它

首先,在控制器中执行类似操作

    // partial
    public ActionResult report(string reportName)
    {
        return View(reportModel.Name);
    }
然后,确保存在共享报告名称的局部视图

然后,可以按如下方式调用局部视图:

@{Html.RenderActionreport,主页,新建{reportName=report};}

上面的行将把partial view Report.cshtml呈现到父视图或主布局中

编辑 嗯。所以每个报告都有一个名称-值对列表,对吗

假设这样,我们可以编写一个操作,将该列表传递给您的视图

    public ActionResult DisplayPairs()
    {
        NameValueCollection pairs = new System.Collections.Specialized.NameValueCollection();
        pairs.Add("Name", "Value");
        pairs.Add("Name2", "Value2");
        pairs.Add("Name3", "Value3");
        pairs.Add("Name4", "Value4");

        return View(pairs);
    }
然后我们将看到DisplayPairs视图:

@model System.Collections.Specialized.NameValueCollection

@{
    ViewBag.Title = "DisplayPairs";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>DisplayPairs</h2>
<table>
@foreach(string key in Model.AllKeys){
    <tr><th>@key</th><td>@Model[key]</td></tr>
}
</table>

我希望这会有所帮助,为什么不创建一个包含所有所需数据的包装器类呢

public class ReportViewModel
{
    IEnumerable<KeyValuePair<object, object>> Items { get; set; }

    public ReportViewModel()
    { Items = new List<KeyValuePair<object, object>>() }
}
在您的视图中,只需迭代KeyValuePairs,然后打印键和值:

<ul>
@foreach(var kvp in Model.Items)
{
    <li>@kvp.Key: @kvp.Value</li>
}
</ul>
请原谅,如果我的剃须刀语法是错误的-我还没有与它的工作很多到目前为止


此外,如果列表中有奇怪类型的对象,则可能需要向ToSting添加调用。如果需要的话,我认为这个框架可以为您做到这一点,但我不确定……

也许一些代码会有所帮助。你有没有写报告模型之类的东西?托马斯·莱肯,我会试试你的建议。
var model = new ReportViewModel();
model.Items.Add("BookName", "C#");
model.Items.Add("IsSold", false);
return View(model);
<ul>
@foreach(var kvp in Model.Items)
{
    <li>@kvp.Key: @kvp.Value</li>
}
</ul>