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

时间:2012-06-08 11:07:48

标签: c# ajax asp.net-mvc

我正在使用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)。

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

1 个答案:

答案 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_XCropInfo_Y,{{ 1}}和CropInfo_Width(我认为隐藏字段将在HTML中命名,请在页面源中检查)