我敲擊一個像web應用程序的嚮導,將輸入一個窗體並有條件地重定向到確認頁面,如果輸入的項目已經存在。 「控制控制器動作呼叫訂單
」系統中已經有一個產品名稱,您確定要繼續嗎?「。
我可以在我的控制器上有一個「確認」操作,但這個操作只能由最初的「添加」操作調用。
我的問題是,控制控制器動作調用順序的最佳方法是什麼?顯然有人可以輸入//確認url並欺騙數據。
希望我說得通。
謝謝,
我敲擊一個像web應用程序的嚮導,將輸入一個窗體並有條件地重定向到確認頁面,如果輸入的項目已經存在。 「控制控制器動作呼叫訂單
」系統中已經有一個產品名稱,您確定要繼續嗎?「。
我可以在我的控制器上有一個「確認」操作,但這個操作只能由最初的「添加」操作調用。
我的問題是,控制控制器動作調用順序的最佳方法是什麼?顯然有人可以輸入//確認url並欺騙數據。
希望我說得通。
謝謝,
你希望用戶有時確認一些事情,對吧?
如果是這樣,請將表單提交給確認操作;然後
public ActionResult Confirm(MyObject mObj, string confirmButton)
{
if(NotAlreadyExists(mObj) || confirmButton)
return RedirectToAction("Create", mObj)
else
{
ModelState.AddModelError("DuplicateProduct","Please confirm");
ViewData["showConfirm"] = true;
return View(mObj);
}
}
Ofourse,那麼你幾乎不需要特別的行動,你可以簡單地把你的DataContext創建代碼,而不是RedirectToAction,但無論...然後
視圖將需要尋找showConfirm ,並顯示消息+確認按鈕。
您無法控制控制器操作調用順序。
但是,您可以將此概念推廣到您編碼到應用程序中的某些內容。
我可以想到一些方法來確保訪問者看到一個步驟:會話狀態,cookie,將操作中的令牌傳遞給action,以及tempdb在asp.net mvc中。
TempData將會是最簡單的,我敢打賭,如果你只是想把這個功能拿出來。
有Add添加一個特殊的值在TempData重定向到確認之前。如果Confirm在TempData中看不到該值,則它將重定向回Add。如果它在那裏,確認做它的正常業務。