【发布时间】:2011-12-20 23:51:55
【问题描述】:
我在 ASP.Net MVC 3 C# 中制作表单。
表单的这个特定页面包含用户的工作经历。
用户可以拥有多个工作经历。所以视图模型包含一个列表。
现在很容易做到这一点(并且有效):
int i = 0;
foreach (FrgCandidatePortal_2.Models.tblCandidateEmploymentHistory item in Model.empHistList)
{
<div>
<label>
Employment History @Html.Encode(i + 1)</label></h4>
<label>
Company Name</label>
<div>
@Html.EditorFor(c => c.empHistList[i].LJCOMP)
@Html.ValidationMessageFor(c => c.empHistList[i].LJCOMP)
</div>
...
</div>
i++;
}
但我希望能够使用按钮和 ajax 添加一个空的。
所以我认为“我不能让它成为局部视图”。
问题 1:局部视图是处理需要添加删除和保存功能的重复表单元素的正确方法吗?
现在我已将其设为局部视图,这是我的页面视图模型:
public class EmploymentHistoryViewModel : ViewModels
{
private List<EmploymentHistory_Partial> _EmploymentHistory_Partial_List;
public List<EmploymentHistory_Partial> EmploymentHistory_Partial_List
{
get
{
if (_EmploymentHistory_Partial_List.Count == 0)
{
int i = 0;
foreach (tblCandidateEmploymentHistory item in dataModel.candidateModel.tblEmpHistList)
{
_EmploymentHistory_Partial_List.Add(new EmploymentHistory_Partial(i, item));
i++;
}
return _EmploymentHistory_Partial_List;
}
else
{
return _EmploymentHistory_Partial_List;
}
}
set {
//foreach emphist partial fill emp hist
_EmploymentHistory_Partial_List.Clear();
dataModel.candidateModel.tblEmpHistList = value.Select(c=>c.empHist).ToList();
}
基本上,我的视图模型是 _EmploymentHistory_Partial 的列表。
当我在我的就业历史视图中使用此代码时,它会正确显示数据:
int i = 0;
foreach (FrgCandidatePortal_2.Models.EmploymentHistory_Partial item in Model.EmploymentHistory_Partial_List)
{
Html.RenderPartial("_EmploymentHistory_Partial",new FrgCandidatePortal_2.Models.EmploymentHistory_Partial(i,Model.EmploymentHistory_Partial_List[i].empHist));
}
但它没有提交 问题 2:为什么值不提交给模型?
(我假设它与 html 文档中的 mvc 命名约定有关)
更新
进展!
通过在调试时提交之前编辑其中一个字段的 html(以便 ID 和 NAME 等于 EmpHist_Partial_List[0].empHist.LJCOMP 而不是 empHist.LJCOMP)。有效。它到达了视图模型中的就业历史_部分_列表集。
所以它的命名。似乎正在发生的事情是部分视图没有从表单的其余部分继承命名的开头(并且非常正确)。 有什么方法可以实现吗?
【问题讨论】:
-
请原谅我可能的无知,但我不认为编辑器模板可以呈现代表模型的多个“行”。他们只是为您提供模型的编辑器,因为我需要在一页中包含零个或多个模型。然后我将不得不像最初那样使用 foreach 。但这使我无法通过 ajax 轻松访问它以添加另一个。我将不得不重新加载页面并在列表末尾添加一个空页面。这会起作用,但它很笨重。我希望能够得到部分/无论如何。
-
感谢您的链接。看来我需要实现 Html.BeginCollectionItem。随意提交作为答案,我会给你n接受并竖起大拇指:)
标签: c# asp.net-mvc-3 viewmodel partial-views