0

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

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

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

额外信息:

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

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

总而言之,管理起来似乎非常复杂。似乎更合乎逻辑的是,ASP.Net MVC 代码只是提供了一个 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]);
    }   
}
4

1 回答 1

2

您可以向控制器操作发送 AJAX 请求,该操作将使用强类型分部视图返回包含正确标记的分部视图,并将该部分视图注入 DOM。Steven Sanderson 有一篇关于这个主题的不错的博客文章:http: //blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

于 2012-06-18T14:32:36.797 回答