所以我有一个自定义ViewModel(CompanySalaryDataViewModel
),其上有一组其他ViewModel(PersonalIncomeViewModel
)。 最终,我希望为CompanySalaryDataViewModel
设置一个EditorTemplate,它以某种方式使用PersonalIncomeViewModel
的EditorTemplate,当它传递回我的POST时,它提供了对我的ViewModel的双向绑定控制器。
例如,让我们说它是这样的:
public class CompanySalaryDataViewModel
{
string CompanyName { get; set; }
IList<PersonalIncomeViewModel> AllSalaryData { get; set; }
}
public class PersonalIncomeViewModel
{
long UniqueID { get; set; }
string PersonName { get; set; }
int JanIncome { get; set; }
int FebIncome { get; set; }
int MarIncome { get; set; }
int AprIncome { get; set; }
int MayIncome { get; set; }
int JunIncome { get; set; }
int JulIncome { get; set; }
int AugIncome { get; set; }
int SepIncome { get; set; }
int OctIncome { get; set; }
int NovIncome { get; set; }
int DecIncome { get; set; }
}
我希望以类似于以下标记的方式完成此工作:
<%= Html.TextBoxFor(x => x.CompanyName) %>
<table cellspacing="0">
<thead>
<tr class="t-grid-header">
<th class="t-header">ID</th>
<th class="t-header">Person</th>
<th class="t-header">Jan</th>
<th class="t-header">Feb</th>
<th class="t-header">Mar</th>
<th class="t-header">Apr</th>
<th class="t-header">May</th>
<th class="t-header">Jun</th>
<th class="t-header">Jul</th>
<th class="t-header">Aug</th>
<th class="t-header">Sep</th>
<th class="t-header">Oct</th>
<th class="t-header">Nov</th>
<th class="t-header">Dec</th>
</tr>
</thead>
<%
var isAlt = false;
foreach (var salaryData in Model.AllSalaryData)
{
var salary = salaryData;
if (isAlt)
{%>
<tr class="t-alt">
<%
}
else
{%>
<tr>
<%
}
isAlt = !isAlt;
%>
<td><%=Html.TextBoxFor(x => salary.UniqueID)%></td>
<td><%=Html.TextBoxFor(x => salary.PersonName)%></td>
<td><%=Html.TextBoxFor(x => salary.JanIncome, new {id = salary.PersonName + "_1", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.FebIncome, new {id = salary.PersonName + "_2", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.MarIncome, new {id = salary.PersonName + "_3", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.AprIncome, new {id = salary.PersonName + "_4", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.MayIncome, new {id = salary.PersonName + "_5", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.JunIncome, new {id = salary.PersonName + "_6", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.JulIncome, new {id = salary.PersonName + "_7", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.AugIncome, new {id = salary.PersonName + "_8", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.SepIncome, new {id = salary.PersonName + "_9", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.OctIncome, new {id = salary.PersonName + "_10", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.NovIncome, new {id = salary.PersonName + "_11", style = "width: 45px;"})%></td>
<td><%=Html.TextBoxFor(x => salary.DecIncome, new {id = salary.PersonName + "_12", style = "width: 45px;"})%></td>
</tr>
<%
}%>
</table>
此代码的问题是:
salary.JanIncome
- 不包含任何区别于其他薪水的内容。每个月都有同样的问题。AllSalaryData
集合为空。最终,我想我需要更好地理解使用带有集合的模板,但另一部分是将t-alt
类正确应用于相应表行的“逻辑”。
注意#1:我通过这种方式为我与这些文本框进行交互的一些javascript设置HTML ID。
注意#2:我不是真的用薪水数据来做这件事。
答案 0 :(得分:0)
您的问题不明确: 1.“ViewModels”是视图模型 - 至少从设计的角度来看。您是否打算能够“批量”更新集合/列表或您的帖子以发送相同对象类型的集合? 2.假设您的模型 - PersonalIncome [ViewModel]是可持久的。因此,您将在时间编辑一条记录,您将使用的编辑器模板将仅用于集合中的项目。
你能详细说明你不想做什么的意图 - 除了用文本框创建一个'列表'视图之外还有其他选择。
答案 1 :(得分:0)
好的,所以我找到了一个不太理想但功能正常的功能解决方案。显然foreach
是问题但是for(var i=0; i < xxx.Count; i++)
有效,因为索引号用于生成渲染控件的名称。不理想,但这很有效。