如何:实现ASP.NETMVC的jQuery版本;“强类型局部视图”;

如何:实现ASP.NETMVC的jQuery版本;“强类型局部视图”;,jquery,asp.net-mvc,jquery-ui,Jquery,Asp.net Mvc,Jquery Ui,我正在制作一份多页评估表,其中的问题/回答由数据库驱动。目前,我通过标准ASP.NETMVC使用Html.BeginForm的基本系统 此时,整个系统的关键是“强类型局部视图”。从数据库中读取问题/响应时,响应类型将确定创建哪个派生模型并将其添加到集合中。它遍历集合的主视图,并使用ASP.Net MVC的“强类型部分视图”系统来确定要呈现正确响应类型的视图(单选按钮、下拉列表或文本框) 我想将此过程从Html.BeginForm更改为Ajax.BeginForm。问题是我不知道如何在JavaSc

我正在制作一份多页评估表,其中的问题/回答由数据库驱动。目前,我通过标准ASP.NETMVC使用Html.BeginForm的基本系统

此时,整个系统的关键是“强类型局部视图”。从数据库中读取问题/响应时,响应类型将确定创建哪个派生模型并将其添加到集合中。它遍历集合的主视图,并使用ASP.Net MVC的“强类型部分视图”系统来确定要呈现正确响应类型的视图(单选按钮、下拉列表或文本框)

我想将此过程从Html.BeginForm更改为Ajax.BeginForm。问题是我不知道如何在JavaScript/jQuery世界中实现问题/响应的动态创建。有什么想法和/或建议吗

额外信息:

更改的原因是需要进行复杂的实时跳过模式(验证)。有些问题会触发跳过模式。跳过模式决定了其他问题的可访问性和价值。当用户更改触发跳过模式的问题时,需要将所有当前答案发送回服务器,以便通过规则引擎运行

一个问题是,当ASP.NETMVC输入设置为只读时,它的值不会回发。解决方案是具有当前值的隐藏输入。在用户或规则引擎更改值的情况下,此隐藏值都需要由JavaScript管理

总而言之,管理起来似乎非常复杂。更合乎逻辑的是,ASP.NETMVC代码只是提供一个JSON模型,而jQuery只是在浏览器中构建表单,然后调用保存操作或跳过模式验证操作,并将JSON模型传递给它。似乎可以消除一层头痛:)

以下是生成动态表单的当前代码:

@using (Html.BeginForm(new { mdsId = @Model.MdsId, sectionId = @Model.SectionId }))
{
    <div class="SectionTitle">
        <span>Section @Model.SectionName - @Model.SectionDescription</span>
        <span style="float: right">@Html.CheckBoxFor(x => x.ShowUnansweredQuestions) Show only unaswered questions</span>
    </div>

    @Html.HiddenFor(x => x.PrevSectionId)
    @Html.HiddenFor(x => x.NextSectionId)

    for (var i = 0; i < Model.answers.Count(); i++)
    {
        @Html.EditorFor(m => m.answers[i]);
    }   
}
@使用(Html.BeginForm(新的{mdsId=@Model.mdsId,sectionId=@Model.sectionId}))
{
Section@Model.SectionName-@Model.SectionDescription
@CheckBoxFor(x=>x.ShowUnansweredQuestions)仅显示未回答的问题
@Html.HiddenFor(x=>x.PrevSectionId)
@Html.HiddenFor(x=>x.NextSectionId)
对于(var i=0;im.answers[i]);
}   
}

您可以向控制器操作发送AJAX请求,该操作将使用强类型部分视图返回包含正确标记的部分视图,并将该部分视图注入DOM。史蒂文·桑德森(Steven Sanderson)在这个主题上发表了一篇很好的博文:

nice blog,但他只是简单地将html添加到他已经存在的内容的末尾,并且仍然使用传统的博文。我的情况有点复杂,我将在主要帖子中解释,因为评论中有空格和格式:)他使用AJAX获取动态添加的元素的标记。Darin,我理解他在做什么,但我所做的实际上比我最初发布的要先进。我只是补充了更多关于我正在做的事情的细节。总之,史蒂文·桑德森走的是正确的道路,我需要的不仅仅是这些。我完全相信会有一个比我刚才在原始问题中提出的更好的解决方案。