Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用MVC AJax.begin传递动态值_C#_Ajax_Asp.net Mvc - Fatal编程技术网

C# 如何使用MVC AJax.begin传递动态值

C# 如何使用MVC AJax.begin传递动态值,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正在使用MVC和AJax.BeginForm对我的页面进行一些AJax更新。BeginForm代码类似于: using (Ajax.BeginForm("HandleCrop", "Card", new { accept = true, id = Model.ImageUpload.ID,

我正在使用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) %>
m.CropInfo.X)%%>
m、 CropInfo.Y)%>
m、 CropInfo.宽度)%%>
m、 CropInfo.高度)%%>
但是,一些客户端javascript正在动态修改这些值,这些值需要通过Ajax回调发布到服务器。上面的代码显然不能像imageCrop那样工作。。呈现页面时,将填充Ajax表单中的参数(因此全部为0)


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

从Ajax中删除此部分:

    imageCropX = Model.CropInfo.X,
    imageCropY = Model.CropInfo.Y,
    imageCropWidth = Model.CropInfo.Width,
    imageCropHeight = Model.CropInfo.Height  
使用
Action
中的
TryUpdateModel
,您的
CropInfo
应根据已发布的数据填写OK

如果未使用模型的自动更新(或通过
TryUpdateModel

而不是使用
操作中的数据作为输入参数,然后将这些
操作
参数重命名为
CropInfo_X
CropInfo_Y
CropInfo_宽度
CropInfo_高度
(我想这就是隐藏字段在HTML中的命名方式,请在页面源代码中检查)

我没有使用模型的自动更新。我删除了您描述的参数,并且隐藏字段确实按照您描述的方式命名(使用41;。但是,我仍然不明白这些值将如何在函数“HandleCrop”中结束。向HandleCrop添加模型参数不起作用,因为这将只是一个未初始化的对象。请详细说明如何正确执行此操作?它们将最终起作用,因为当Ajax发出post请求时,将查找并序列化所有输入,您好dden、select和表单中的其他字段。您所需要做的就是确保正在运行的参数名称与HTML中的字段名称匹配。此行为已经实现并发生在幕后。我现在看到隐藏字段的名称将包含。(点)这对这种情况不好,因为C#不允许在标识符中使用点。如果前面讨论的不起作用,请将您的Html.HiddenFor替换为类似ID的内容,如您前面所说的,是带u的,而不是带点(.).我现在已经将隐藏字段名称作为参数添加到action函数中,但是所有参数都以null形式传入。只要通过任何必要的方式使隐藏字段的名称和action中参数的名称相同,它就会工作。