我正在使用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)。
我的问题是:解决这种情况的正确方法是什么?
答案 0 :(得分:1)
从Ajax开始,这部分内容应该完全删除:
imageCropX = Model.CropInfo.X,
imageCropY = Model.CropInfo.Y,
imageCropWidth = Model.CropInfo.Width,
imageCropHeight = Model.CropInfo.Height
TryUpdateModel
中的Action
CropInfo
您的TryUpdateModel
应该可以通过发布的数据填写。
如果您不使用自动更新模型(或通过Action
)
而不是你在<{1}}中使用这些数据作为输入参数,然后只需将这些Action
参数重命名为CropInfo_X
,CropInfo_Y
,{{ 1}}和CropInfo_Width
(我认为隐藏字段将在HTML中命名,请在页面源中检查)