【问题标题】:IFormCollection not receiving single form dataIFormCollection 不接收单个表单数据
【发布时间】:2021-07-04 06:33:37
【问题描述】:

我正在研究 asp.net 核心 MVC 项目。有一个视图已经有一个带有一些静态字段的表单,这些字段被提交到后端并且数据保存在 DB 中。现在需要在视图中添加动态字段。这些字段将来自数据库。渲染这些字段之后,就是提交这些动态字段数据的部分了。我的理解是您可以使用 FormCollections 在表单中收集表单字段。所以我所做的是创建两种形式,一种是静态的,另一种是动态的,如下所示:

@model FormDataVM
<section>
    <form class="staticFormFields">
        <input type="text" id="FirstName" value="@Model.FirstName">
    </form>
    <form class="dynamicFormFields">
        @foreach (var field in Model.DynamicFields)
        {
        <div class="form-group row">
            <label class="col-md-4 col-form-label">@field.FieldTitle</label>
            <div class="col-md-8">
                <input class="form-control" type="@field.FieldType" placeholder="@field.FieldTitle" value="@field.FieldValue" name="@field.FieldCode" />
            </div>
        </div>
        }   
    </form>

    <button type="button" class="btn btn-primary" onclick="SubmitForm">Save</button>

</section>

所以在服务器端,我在视图模型中添加了一个 IFormCollection 成员,如下所示:

public class FormDataVM
{
    public string FirstName { get; set; }
    public IFormCollection DynamicFormFields { get; set; }
} 

然后单击按钮,我向 API 发送 Ajax 调用,如下所述:

<script>
function SubmitForm() {
    var firstName = $('#FirstName').val();
    var dynamicFormFields = $('#dynamicFormFields').serialize();;
            $.ajax({
                type: 'POST',
                url: <API URL>,
                data: {
                    FirstName: ,
                    DynamicFormFields: dynamicFormFields
                },
                dataType: "json",   
            }).done(function (result) {
                if (!result.status) {
                    alert("Error");
                }
                alert("Success");
            });
        }
    }
</script>

我希望的是 DynamicFormFields 将只包含动态表单中的字段,但它包含所有字段的列表,即 staticForm 和 dynamicForm 中的字段。当我调试我的 ajax 调用时,对象 dynamicFormFields 确实只包含动态字段,但是当调用到达服务器端时,DynamicFormFields 变量包含所有字段数据。我显然在这里遗漏了一些东西。谁能指导我为什么会发生这种情况以及正确的方法是什么。

谢谢。

【问题讨论】:

    标签: javascript c# asp.net ajax forms


    【解决方案1】:

    对于任何可能面临此类问题的人,我无法解决此问题,但决定采取另一种方法。我将变量(DynamicFormFields)类型从 IFormCollection 更改为字符串,并从客户端发送 JSON 字符串。

    JavsScript 代码如下所示:

    <script>
    function SubmitForm() {
        var firstName = $('#FirstName').val();
        var dynamicFormFields = JSON.stringify($('#dynamicFormFields').serializeArray());
        $.ajax({
            type: 'POST',
            url: <API URL>,
            data: {
                FirstName: firstName,
                DynamicFormFields: dynamicFormFields
            },
            dataType: "json",   
        }).done(function (result) {
            if (!result.status) {
                alert("Error");
            }
            alert("Success");
        });
    }
    </script>
    

    在服务器端,我将这个 JSON 解析为 KeyValue 对,如下所示:

    var dynamicFieldList = JsonConvert.
                           DeserializeObject<IEnumerable<DynamicFormKV>>
                           (FormDataVM.DynamicFormFields);
    

    .

    /** KV model for parsing dynamic form fields JSON **/
    
    public class DynamicFormKV
    {
        public string name { get; set; }
        public string value { get; set; }
    }
    
    /******/
    

    【讨论】:

      猜你喜欢
      • 2017-10-23
      • 2019-01-14
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2020-11-21
      • 2013-06-09
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多