使用jQuery在ASP.NET MVC中添加多个嵌套数据

使用jQuery在ASP.NET MVC中添加多个嵌套数据,jquery,asp.net-mvc,jquery-ui,model,Jquery,Asp.net Mvc,Jquery Ui,Model,我一直在研究一个实现,其中我有一个基类和另一个类的集合对象。它非常类似于在这个平台上找到的实现。该站点的实现与我的实现有一点不同。因为我有很多输入元素,所以逐行创建它们是不可行的。因此,我实现了一个jQuery选项卡,它从div加载内容。div使用Html.RenderPartial调用自定义控件。不管怎么说,在这一步之前,它都可以正常工作。使用jQuery,我尝试使用以下代码更改name属性 $('#' + id + ' input[id^="Applicant_"]'

我一直在研究一个实现,其中我有一个基类和另一个类的集合对象。它非常类似于在这个平台上找到的实现。该站点的实现与我的实现有一点不同。因为我有很多输入元素,所以逐行创建它们是不可行的。因此,我实现了一个jQuery选项卡,它从div加载内容。div使用Html.RenderPartial调用自定义控件。不管怎么说,在这一步之前,它都可以正常工作。使用jQuery,我尝试使用以下代码更改name属性

            $('#' + 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;
        });
<% Html.RenderPartial("~/Views/Shared/UserControls/Application/Edit/ContactInformation.ascx"); %>
在IE8上呈现html后,我可以看到元素名称没有改变,但是有一个名为submitName的新属性,我假设它就是要提交的属性。出于某种原因,就像文章一样,我并没有得到多个元素。我不确定我错过了什么

这里有更多的细节

我正在使用Visual Studio 2008和ASP.NET MVC2。基本模型是

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; }
}
公共类应用程序{
私人IList申请人=新列表();
公共虚拟IList应用程序列表
{
获取{返回申请者;}
设置{申请人=值;}
}
}
公开课申请人{
[显示名称(“姓氏”)]
公共虚拟字符串LName{get;set;}
[显示名称(“名字”)]
公共虚拟字符串FName{get;set;}
}
主aspx包含以下代码

            $('#' + 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;
        });
<% 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.applicationSlist的计数应为3。应用程序ID已正确提交,但集合未正确提交。

问题已解决。然而,我不能确切地确定区别是什么。这就是我在aspx应用程序中引用元素的方式。applicationList[0]。Name。因为在APSX中,模型引用了基础模型,所以我将行更改为Model.applicationList[0],它开始工作。模型和应用程序之间是否存在差异。我假设放置模型提交为页面创建的对象,放置应用程序在提交时创建一个新对象。这是一个正确的假设吗?

您能在提交之前添加html的外观吗?为了测试,我将一些html元素编码到了aspx页面中。我最终也得到了同样的结果。这有帮助吗?请发布控制器操作?另外,包含
ApplicationID
Application
的模型类在哪里?现在,这些文本框不能绑定到您发布的任何其他内容。现在控制器中没有太多内容。控制器有两个方法CreatePartner,其中一个接受应用程序模型,另一个没有任何内容。至于模型,我已经在上面发布了应用程序和应用程序模型类。这个问题已经部分解决了。我得到了使用硬编码元素的提交。我将应用程序更改为aspx页面中提到的模型,提交的值没有问题。然而,现在我有一个新问题。由于某些原因,IE没有更改name属性,因此jQuery正在创建一个名为submitName的新属性,并且它不能处理提交。有什么想法吗?