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  

TryUpdateModel、投稿されたデータから OK を入力Actionする必要があります。CropInfo

モデルの自動更新を使用しておらず(または 経由でTryUpdateModel)、代わりにこのデータを入力パラメーターとして使用しいる場合は、ActionこれらのActionパラメーターの名前をCropInfo_XCropInfo_YCropInfo_Widthおよびに変更しますCropInfo_Height(HTML で非表示フィールドに名前を付ける方法はこれだと思います)。 、ページソースでこれを確認してください)

于 2012-06-08T11:20:03.127 に答える