2014-02-24 2 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, который выживает только для этого представления.

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

    return View(new User()); 
} 

Теперь в представлении используйте ViewData вместо TempData.

Смежные вопросы