如何使用 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)。

我的问题是:处理这种情况的正确方法是什么?

如何使用 MVC AJax.BeginForm 传递动态值

从 Ajax 中,这部分应该绝对删除:

    imageCropX = Model.CropInfo.X,
    imageCropY = Model.CropInfo.Y,
    imageCropWidth = Model.CropInfo.Width,
    imageCropHeight = Model.CropInfo.Height  

ActionTryUpdateModel,您的CropInfo应从发布的数据中正常填充。

如果您不使用模型的自动更新(或通过TryUpdateModel)而不是在Action中使用此数据作为输入参数,然后只需将这些Action参数重命名为 CropInfo_XCropInfo_YCropInfo_WidthCropInfo_Height(我认为这就是隐藏字段在 HTML 中的命名方式,请在页面源代码中检查这一点)