2016-04-25 56 views
0

我目前正在一個非常大的表格嚮導步驟(控制器動作)。我認爲通過實施表單嚮導(多個視圖/操作結果)來改變用戶體驗將是一個好主意。ASP.NET MVC窗體嚮導防止用戶跳過使用URL欄

一個要求是用戶必須完成一個小的合格性測試,以確保它們符合之前啓動應用程序嚮導本身的最低要求。

做完這樣的事之前,我只能看到一個辦法解決這個問題,並且在確定用戶是否可以訪問表單嚮導圖/ s的會話使用標誌e.g IsEligible。假設我的控制器有兩個ActionResults(Eligibility和WizardStepOne),它們是服務器分開的視圖。例如:

控制器 - 未測試的代碼

public ActionResult Eligibility() 
{ 
    Return View(); 
} 

[HttpPost] 
public ActionResult Eligibility(EligibilityViewModel model) 
{ 
    if(!ModelState.IsValid) 
    { 
     return View(model); 
    } 

    Session["IsEligible"] = true; 

    return("Success"); 
} 

public ActionResult WizardStepOne() 
{ 
    bool stuff = (bool)Session["stuff"]; 

    if(IsEligible == null) 
    { 
     return("Eligibility"); 
    } 

    return RedirectToAction("Eligibility"); 
} 

總之,如果用戶嘗試訪問該向導和IsEligible標誌的第一步驟中未被由資格後動作,則用戶設置重新導向回到資格表格。

我也在付諸行動的過濾器,但不能利用它多大意義。我還必須在稍後階段實施此功能,以防止用戶使用url跳過嚮導步驟,例如跳過WizardStepOne並從WizardStepTwo開始。

是否有更好的方法,然後一個在這種情況下,上述的?我寧願避免使用會話,因爲重新啓動表單會變得有問題,因爲它需要重新啓動按鈕來放棄會話,特別是在嚮導步驟之間。

回答

0

什麼你提的聲音就像你可能會使用一些簡單的狀態機通過表單定義有效的措施。因此,當用戶處於第3階段時,例如,您將檢查他是否來自第2步。對於特定用戶和會話的每個步驟>您可以在他的會話中保存一些散列值。這樣他們可以不用直接輸入url。

+0

有趣。你能提供一個例子嗎? – user2488275