一个简单的问题:
所以,我正在开发一个小型MVC / C#应用程序,我正在使用ViewModel将数据传递给我的视图。 ViewModel实际上是3个模型的组合。
我的模特:
public class Sourcing_ProfileSourcingAreas
{
public string Area { get; set; }
public string Details { get; set; }
}
public class DefCountry
{
public string CountryName { get; set; }
public string CountryCode { get; set; }
}
我的ViewModel:
public class SourcingIndex
{
public List<DefCountry> CountryLst { get; set; }
public List<Sourcing_ProfileSourcingAreas> AreaLst { get; set; }
}
在我看来,我将此行放在顶部@model SourcingIndex
以声明我将使用此ViewModel
我也可以使用foreach
循环轻松指定要显示的模型,例如:
@foreach (Sourcing_ProfileSourcingAreas area in Model.AreaLst)
{
<tr>
<td>@area.Area</td>
<td>@area.Details</td>
</tr>
}
和
@foreach (DefCountry ctry in Model.CountryLst)
{
<option>@ctry.CountryName</option>
}
但是,我无法创建@Html.TextBox
并将其分配给模型中的特定属性!
如果可能的话,我希望它是这样的:@Html.TextBoxFor(model => model.AreaLst.Area)
谢谢
答案 0 :(得分:1)
这是关于Razor的一个奇怪的怪癖。如果您尝试访问foreach
循环中的对象,则很难解决模型中的位置。您需要使用以下语法:
@for (int x = 0; x < Model.CountryLst.Count(); x++)
{
@Html.TextBoxFor(t => t.CountryLst[x].CountryName)
}
这应该产生类似
的输入<input name="countryLst[1].CountryName"/>
答案 1 :(得分:1)
@for(var i = 0; i < Model.CountryLst.Count(); i++)
{
<text>@Html.TextBoxFor(p=>Model.CountryLst[i].CountryCode)</text>
}