在ASP.NET Core 3.1 Razor Pages Web应用中,即使使用Ajax调用,Razor页面表单数据仍然被清除的原因是因为默认情况下,Razor页面在每次请求完成后都会重置表单数据。这是为了确保页面始终处于初始状态,以便处理其他请求。
要解决这个问题,你可以使用以下方法之一:
// 保存表单数据
var formData = $("#myForm").serialize();
// 发送Ajax请求
$.ajax({
url: "/MyPage",
type: "POST",
data: formData,
success: function(result) {
// 请求完成后,恢复表单数据
$("#myForm").deserialize(result.formData);
}
});
// 在请求开始时,将表单数据存储在Session中
HttpContext.Session.SetString("FormData", Request.Form.ToString());
// 发送Ajax请求
// ...
// 请求完成后,将存储的数据重新填充到表单中
var formData = HttpContext.Session.GetString("FormData");
if (!string.IsNullOrEmpty(formData))
{
// 使用FormDataCollection将字符串转换为表单数据
var formCollection = new FormCollection(FormDataCollection.Parse(formData));
// 使用TryUpdateModelAsync更新模型
await TryUpdateModelAsync(formCollection);
}
无论使用哪种方法,都可以避免Razor页面表单数据被清除的问题,并保持表单数据的持久化。