如何使用 MVC AJax.BeginForm 传递动态值
本文关键字:动态 BeginForm 何使用 MVC AJax | 更新日期: 2023-09-27 18:36:37
我正在使用MVC和AJax.BeginForm对我的页面进行一些ajax更新。BeginForm 代码如下所示:
using (Ajax.BeginForm("HandleCrop", "Card",
new
{
accept = true,
id = Model.ImageUpload.ID,
file = Model.ImageUpload.File,
imageCropX = Model.CropInfo.X,
imageCropY = Model.CropInfo.Y,
imageCropWidth = Model.CropInfo.Width,
imageCropHeight = Model.CropInfo.Height
},
new AjaxOptions
{
HttpMethod = "POST",
OnComplete = "ConfirmCompleted",
OnSuccess = "ReloadUpload",
OnFailure = "Failure"
}, null))
Model.CropInfo被作为隐藏字段放入,如下所示:
<%=Html.HiddenFor(m => m.CropInfo.X) %>
<%=Html.HiddenFor(m => m.CropInfo.Y) %>
<%=Html.HiddenFor(m => m.CropInfo.Width) %>
<%=Html.HiddenFor(m => m.CropInfo.Height) %>
但是,这些值正在被某些客户端 javascript 动态修改,这些值需要通过 Ajax 回调发布回服务器。上面的代码显然不能作为图像裁剪。呈现页面时,将填充 Ajax 表单中的参数(因此全部为 0)。
我的问题是:处理这种情况的正确方法是什么?
从 Ajax 中,这部分应该绝对删除:
imageCropX = Model.CropInfo.X,
imageCropY = Model.CropInfo.Y,
imageCropWidth = Model.CropInfo.Width,
imageCropHeight = Model.CropInfo.Height
Action
中TryUpdateModel
,您的CropInfo
应从发布的数据中正常填充。
如果您不使用模型的自动更新(或通过TryUpdateModel
)而不是在Action
中使用此数据作为输入参数,然后只需将这些Action
参数重命名为 CropInfo_X
、CropInfo_Y
、CropInfo_Width
和 CropInfo_Height
(我认为这就是隐藏字段在 HTML 中的命名方式,请在页面源代码中检查这一点)