我一直在研究一个实现,其中我有一个带有另一个类的集合对象的基类。IT 与此链接上的实现非常相似。该站点的实施与我的实施之间存在一个小差异。由于我有很多输入元素,逐行创建它们是不可行的。所以我实现了一个从 div 加载内容的 jQuery 选项卡。div 使用 Html.RenderPartial 调用自定义控件。总而言之,在这一步之前它工作正常。使用 jQuery,我尝试使用以下代码更改名称属性。
$('#' + id + ' input[id^="Applicant_"]').each(function() {
var nameChange = this.id;
var objectName = this.id.replace('Applicant_', '');
nameChange = nameChange.replace('Applicant_', 'Application.Applicants');
nameChange = nameChange.replace(objectName, '');
nameChange = nameChange + '[' + tabCounter + '].' + objectName;
$(this).attr("name", nameChange);
//this.id = nameChange;
//this.name = nameChange;
});
在 IE8 上呈现 html 后,我可以看到元素名称未更改,但是有一个名为 submitName 的新属性,我假设它是被提交的属性。出于某种原因,就像文章一样,我没有得到多个元素。我不确定我错过了什么。
这里有更多细节
我正在使用带有 ASP.NET MVC2 的 Visual Studio 2008。基本模型是
public class Application {
private IList<Applicant> applicants = new List<Applicant>();
public virtual IList<Applicant> ApplicantsList
{
get { return applicants; }
set { applicants = value; }
}
}
public class Applicant {
[DisplayName("Last Name")]
public virtual string LName { get; set; }
[DisplayName("First Name")]
public virtual string FName { get; set; }
}
主 aspx 包含以下代码。
<% Html.RenderPartial("~/Views/Shared/UserControls/Application/Edit/ContactInformation.ascx"); %>
上面已经给出了更改名称的代码。提交名称以应有的方式正确生成。但是由于某种原因,当我提交到控制器操作时,申请人下的元素数始终为 0。我尝试使用 3 个元素手动硬编码,得到了相同的结果。
我下载了这篇文章并对其进行了测试,它的工作原理与文章中提到的一样。我不确定我是否在做任何不同的事情。
任何帮助,将不胜感激。
更新:
为了让我的测试更轻松一些,我将以下 html 硬编码到 cretae aspx 页面中
<input type="text" name="ApplicationID" value="1" />
<input type="text" name="Application.ApplicantsList[0].LName" value="LName-0" />
<input type="text" name="Application.ApplicantsList[1].LName" value="LName-1" />
<input type="text" name="Application.ApplicantsList[2].LName" value="LName-2" />
提交代码时,model.ApplicationID 应为 1,Application.ApplicantsList 的计数应为 3。应用程序 ID 已正确提交,但集合未正确提交。