如何防止重复不需要的文本。请看下面的图片(红线区域)。它似乎是一个循环问题,但不熟悉剃刀语法我有点挣扎。我是MVC4的新手,只是尝试了一个小项目并仍在学习,所以任何帮助都将受到赞赏。
控制器:
public ActionResult Destinations()
{
string[] departureAirports = new string[3] { "Edinburgh", "London", "Manchester" };
string[] dCode = new string[3] { "EDI", "LTN", "MAN" };
var destinationList = new List<Destination>();
foreach (var airport in departureAirports)
{
destinationList.Add(new Destination() { departureName = airport });
}
foreach (var code in dCode)
{
destinationList.Add(new Destination() { departureCode = code });
}
return View(destinationList);
}
查看:
@model List<Flight.Models.Destination>
<table>
@foreach (var item in Model)
{
<tr>
<td>Departure Name:</td>
<td>@item.departureName</td>
<td>Departure Code:</td>
<td>@item.departureCode</td>
</tr>
}
</table>
型号:
public class Destination
{
public string departureName { get; set; }
public string departureCode { get; set; }
}
图像:
答案 0 :(得分:2)
问题不在Razor代码中,而在于您如何创建destinationList
模型。您添加departureAirports
,然后在结尾添加dCode
。您可以使用LINQ Enumerable.Zip
将两个数组合并在一起:
var destinationList = departureAirports
.Zip(dCode, (airport, code) => new Destination() { departureName = airport, departureCode = code })
.ToList();
或简单地将destinationList
创建为List<Destination>
而不进行任何转换:
var destinationList = new List<Destination>
{
new Destination{ departureCode = "EDI", departureName = "Edinburgh" },
new Destination{ departureCode = "LTN", departureName = "London" },
new Destination{ departureCode = "MAN", departureName = "Manchester" }
};
答案 1 :(得分:1)
您应将机场代码与城市匹配,方法是将其放在一个列表中。你是惊人的机场。我想你打算把它们结合起来。
string[] departureAirports = new string[3] { "Edinburgh,EDI", "London,LTN", "Manchester,MAN" };
foreach (string airport in departureAirports)
{
string[] data=airport.Split(',');
destinationList.Add(new Destination() { departureName = data[0], departureCode=data[1]});
}
return View(destinationList);
答案 2 :(得分:0)
问题不在于Razor语法。问题出在您的控制器内部。让我解释一下这里发生了什么。
您已创建了一个视图,该视图绑定到模型 - List<Destination>
。这意味着当您返回一个View
,其中一个类型为List<Detsination
的对象作为参数传递给构造函数时,此对象将绑定到将要呈现的View
对象。现在,如果您的Razor语法正确,那么此视图将自动正确显示模型对象中的内容。那么问题出在你的模型对象中。
此模型对象(destinationList
)在控制器中创建,然后作为参数传递给View
。看看这个destinationList
是如何填充的。您有两个单独的循环来填充Destination
对象的两个单独属性的值,然后将其添加到列表中。但是,即使仅为一个属性分配值,也会创建整个Destination
对象,但另一个属性的值将设置为其类型的默认值 - 在本例中为null
。
在第二个循环中,当您为departureCode
属性赋值时,每次都会将值分配给新Departure
对象的属性。您可能希望将"EDI"
分配给departureCode
对象的Destination
,该对象的departureName
属性值设置为"Edinburgh"
。但这并不会发生,因为当您将Departure
分配给&#39; deprtureCode`时,会创建一个新的"EDI"
对象。
所以不要使用以下Departure
个对象:
Departure [ departureName = "Edinburgh" , departureCode = "EDI" ]
Departure [ departureName = "London" , departureCode = "LTN"]
Departure [ departureName = "Manchester", departureCode = "MAN"]
你最终拥有:
Departure [ departureName = "Edinburgh", departureCode = null]
Departure [ departureName = "London", departureCode = null]
Departure [ departureName = "Manchester", departureCode = null]
Departure [ departureName = null, departureCode = "EDI"]
Departure [ departureName = null, departureCode = "LTN"]
Departure [ departureName = null, departureCode = "MAN"]
因此是观点的结果。
您应该将代码更改为:
int destinationCount = departureAirports.Count;
for(int i = 0; i < destinationCount ; i++)
destinationList.Add(new Destination() { departureName = departureAirports[i], departureCode = dCode[i];
但是,只有当您确定dCode
数组中每个位置的离场代码与destinationAirports
数组中相应位置的机场名称相匹配时,才能执行此操作。
否则请遵循@ Irb的建议。