2012-06-22 23 views
0

我正在MVC網站上,用戶登錄並可以在活動表單中輸入信息。提交後,它會顯示結果。說這個人去網站上的其他鏈接,然後決定回到活動表格。有沒有辦法讓我的用戶的表單域,下拉框,滑塊位置等仍然保持?表單不應該維護的唯一時間是用戶註銷。MVC - 如何維護表單狀態,直到註銷

這是到目前爲止我的代碼:

景觀 - 活動

@model Project.Models.ActivityModel 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    @Html.TextBoxFor(x => x.Activity_CityName) 
    <div class="editor-label"> 
     <strong>@Html.LabelFor(x => x.Activity_StartDate)</strong> 
    </div> 
    <div class="editor-field"> 
     <input id="checkin" type="text" name="Activity_StartDate" /> 
    </div> 
    @Html.TextBoxFor(x => x.Activity_EndDate) 
    @Html.DropDownListFor(x => x.Activity_NumAdults, AdultNum) 
    @Html.DropDownListFor(x => x.Activity_NumChildren) 
    @Html.DropDownListFor(x => x.Activity_ChildAge1, ChildAge) 
    @Html.DropDownListFor(x => x.Activity_ChildAge2, ChildAge) 
    @Html.DropDownListFor(x => x.Activity_ChildAge3, ChildAge) 

    <div class="submitbutton"> 
     <input data-inline="true"type="submit" id="activity_search" value="Search" /> 
    </div> 
} 

結果視圖 - Activities_FormSuccess

@model Project.Models.ActivityModel 

<p>City: @Model.Activity_CityName</p> 
<p>StartDate: @Model.Activity_StartDate</p> 
<p>EndDate: @Model.Activity_EndDate</p> 

<div> 
    <p><strong>Ticket</strong></p> 
    <p>Number of Adults: @Model.Activity_NumAdults</p> 
    <p>Number of Children: @Model.Activity_NumChildren</p> 
    <p>Child 1 age: @Model.Activity_ChildAge1</p> 
    <p>Child 2 age: @Model.Activity_ChildAge2</p> 
    <p>Child 3 age: @Model.Activity_ChildAge3</p> 
</div> 

控制器

public ActionResult Activities() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Activities(ActivityModel activitysubmission) 
{ 
    return View("Activities_FormSuccess", activitysubmission); 
} 

回答

2

您應該將發佈的模型存儲在會話中的發佈操作中,並在向用戶顯示錶單時將其恢復。

public ActionResult Activities() 
{ 
    if(Session["Activities"] != null) 
    { 
     var activityModel = (ActivityModel)Session["Activities"]; 
     return View(activityModel); 
    } 
    return View(); 
} 

[HttpPost] 
public ActionResult Activities(ActivityModel activitysubmission) 
{ 
    ... 
    Session["Activities"] = activitysubmission; 
    return View("Activities_FormSuccess", activitysubmission); 
} 
+0

謝謝!我能夠大部分工作。當人登出時,我只是設置Session [「Activites」] = null? –

+0

當用戶註銷時,可以調用Session.Abandon() – VJAI

1

將您想要的信息存儲在某種形式的「會話」值中,然後在返回到此視圖並填充(如果適用)時檢查此內容是否存在。

+0

ty迴應!你有什麼可以指示我的例子嗎? –

2

我處理這個問題的方式是在控制器函數之間傳遞的會話對象(可能還保留了用戶的登錄狀態)。當用戶點擊'稍後完成此表單'或其他任何操作時,將表單,表單的值或表單序列化爲JSON格式保存到會話中。每當表單頁面加載時,檢查會話中是否存在該變量;如果是這樣,請使用該數據預填充您的表單;否則,顯示空白。

+0

好的很有道理。我不想浪費你太多的時間,但是如果你提供了一個簡短的例子或者指示我參加一個例子,它會好嗎?我是一個沒有經驗的程序員。 –

+0

我自己沒有任何asp.net的經驗,你必須有一點谷歌周圍自己。也許[一些](http://msdn.microsoft.com/en-us/library/ms178581.aspx)[of](http://wiki.asp.net/page.aspx/57/session/)[這些](http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Abstracting-session-in-ASPNET-MVC.aspx)可能會讓你開始? –

+0

@Mark下面似乎熟悉會話框架,嘗試將我的邏輯應用到他的語法,並看看你想出了什麼。 –