在ViewModel中使用@ Html.TextBoxFor

时间:2017-09-12 14:53:55

标签: c# asp.net asp.net-mvc html5

一个简单的问题:

所以,我正在开发一个小型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)

谢谢

2 个答案:

答案 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>
}