我有一些信息框,它们都是通过Ajax在我的控制器中调用函数然后构建HTML加载的。
我需要为这些信息框提供一些编辑功能,这些功能将简单地用表单替换静态文本。我知道我将如何在常规HTML中执行此操作,但我想使用Html.BeginForm,以便我可以在控制器中处理它。
这就是我想在我的表单中加载的方式(它与加载静态信息框的代码几乎相同)
$.ajax({
url: '@Url.Action("GetCustomerInfoById/")' + id,
type: 'post',
traditional: true,
dataType: 'json',
success: function (result) {
$.each(result.CustomerInfo, function (index, customerInfo) {
$('#infoBox' + customerInfo.ID).html(/* html form goes here */);
});
}
})
这就是我想构建表单的方式
@using (Html.BeginForm("Index", "Customer", FormMethod.Post, new { @class = "form-horizontal" }))
{
@model CustomerInfo
<div class="form-group">
@Html.TextAreaFor(m => m.InfoText, new { @class = "form-control col-12-md", @style = "max-width: none", @rows = "5" })
</div>
<div class="form-group">
@Html.DropDownListFor(m => m.InfoTypeId, new SelectList(InfoTypeList, "Value", "Text"), new { @class = "form-control", @style = "max-width: none" })
</div>
<input type="submit" value="Gem" class="btn btn-primary" />
}
您可以通过使用 customerInfo.ID
作为参数创建新的控制器 ActionMethod 来实现此目的,这会将窗体呈现为分部视图。
为表单提供一个隐藏的 ID 字段,以便在表单帖子发生时可以彼此区分。
使用循环内的其他$.ajax()
调用调用新的 ActionMethod,每个调用都有一个将结果传递到 .html()
语句中的成功函数。