2014-02-24 32 views
0

我想在我的頁面後,像RegisterUser的行動給客戶端的消息result.so我使用TempData(因爲我使用RedirectToAction方法,我不能使用viewbag)。我的問題是,如果用戶打開另一個標籤在同一時間的消息將顯示在另一個選項卡(它可以是任何頁面)。我可以解決嗎?TempData消息在不同的選項卡

@using (@Html.BeginForm("RegisterUser", "UserManagement", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 
    @Html.Partial("_RegisterPagesMessage") 
    <table class="Registertbl"> 
     <tr> 
      <td>نام*</td> 
      <td> @Html.TextBoxFor(m => m.FName, new { maxlength = 20})<br /> 
      </td>    
      <td>سمت*</td> 
      <td>@Html.TextBoxFor(m => m.Post, new { maxlength = 200})</td>     
     </tr> 
    </table> 
    <br /> 
     <input type="submit" value="Insert" class="insertBtn" /> 
     @Html.ActionLink("back", "ViewUserList", "UserManagement") 
} 

// _ RegisterPagesMessage

@if (TempData["MessageResult"] == null) 
{ 
    <div id="ErrorContent" class="msg-Red" style="display: none;"></div> <br />     
} 
else 
{ 
    <div id="ErrorContent" class="@TempData["cssClass"]" > 
      @Html.Label(TempData["MessageResult"] as string) 
    </div> <br /> 
} 

//控制器

[HttpGet] 
    public ActionResult RegisterUser() 
    { 
     return View(new User()); 
    } 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult RegisterUser(Common.UsersManagement.Entities.User model) 
    { 
     SetUserManagement(); 
     var Result = userManagement.RegisterUser(model); 
SetMessage(Result.Mode.ToString()); 
     if (Result.Mode == Common.Extensions.ActionResultMode.Successfully) 
     { 
       return RedirectToAction("RegisterUser"); 
     } 
     // if not Successfull 
     return View(model); 
    }  
    protected void SetMessage(string Mode) 
     { 
      var messageResult = XmlReader.FindMessagekey(Mode); 
      TempData["MessageResult"] = messageResult.MessageContent; 
      TempData["cssClass"] = messageResult.cssClass; 
     } 
+0

用戶是否在新選項卡中打開了相同的操作url,即RegisterUser? – Nilesh

+0

他可以爲此頁面或任何其他頁面執行此操作。 –

+0

如果用戶在另一個選項卡中打開另一個頁面,這有什麼關係?您僅在單個視圖上使用Temp數據值,所以它只會出現在該視圖上。 –

回答

1

簡單的解決方案。在您的RegisterUser控制器方法中,檢查TempData中的值並將其傳輸到ViewData,然後讓View檢查ViewData,該ViewData只存在於該視圖中。

[HttpGet] 
public ActionResult RegisterUser() 
{ 
    if(TempData.ContainsKey("MessageResult") 
    { 
     ViewData["MessageResult"] = TempData["MessageResult"]; 
     ViewData["cssClass"] = messageResult.cssClass; 
    } 

    return View(new User()); 
} 

現在在視圖中使用ViewData而不是TempData。

相關問題