2

我正在使用 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 表单中的 imageCrop.. 参数(因此全为 0)。

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

4

1 回答 1

1

从 Ajax 中这部分应该被完全删除:

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

在你应该从发布的数据中填写好TryUpdateModelActionCropInfo

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

于 2012-06-08T11:20:03.127 回答