2
我使用MVC和AJAX.BeginForm來做一些Ajax更新我的頁面。該BeginForm代碼看起來是這樣的:如何使用MVC傳遞動態值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)。
我的問題是:處理這種情況的正確方法是什麼?
我沒有使用模型的自動更新。我按照你所描述的刪除了這些參數,隱藏的字段確實被稱爲你描述的方式(用_)。但是我仍然不明白這些值如何在'HandleCrop'函數中結束。向HandleCrop添加Model參數不起作用,因爲這只是一個未初始化的對象。你能否詳細說明如何正確地做到這一點? – Arthur
他們將最終行動起來,因爲當Ajax發出post請求時,會發現並序列化表單中的所有輸入,隱藏,選擇和其他字段。您只需確保Action中的參數名稱與HTML中的字段名稱相匹配。這種行爲已經實現併發生在幕後。 – Dusan
我已經看到你的隱藏字段的名稱將包含。 (點),這對於這種情況並不好,因爲C#不允許在標識符中使用點。如果先前討論過的方法不起作用,請將您的Html.HiddenFor替換爲 Dusan