2009-05-17 47 views
2

我敲擊一個像web應用程序的嚮導,將輸入一個窗體並有條件地重定向到確認頁面,如果輸入的項目已經存在。 「控制控制器動作呼叫訂單

」系統中已經有一個產品名稱,您確定要繼續嗎?「。

我可以在我的控制器上有一個「確認」操作,但這個操作只能由最初的「添加」操作調用。

我的問題是,控制控制器動作調用順序的最佳方法是什麼?顯然有人可以輸入//確認url並欺騙數據。

希望我說得通。

謝謝,

回答

3

你希望用戶有時確認一些事情,對吧?

如果是這樣,請將表單提交給確認操作;然後

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 ,並顯示消息+確認按鈕。

1

您無法控制控制器操作調用順序。

但是,您可以將此概念推廣到您編碼到應用程序中的某些內容。

我可以想到一些方法來確保訪問者看到一個步驟:會話狀態,cookie,將操作中的令牌傳遞給action,以及tempdb在asp.net mvc中。

TempData將會是最簡單的,我敢打賭,如果你只是想把這個功能拿出來。

有Add添加一個特殊的值在TempData重定向到確認之前。如果Confirm在TempData中看不到該值,則它將重定向回Add。如果它在那裏,確認做它的正常業務。