【发布时间】: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