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