C# 不同选项卡中的TempData消息
我想在我的页面中,在像RegisterUser这样的操作之后,向客户端发送一条消息以获取结果。所以我使用TempData(因为我使用的是RedirectToAction方法,所以我不能使用viewbag)。我的问题是,如果用户在同一时间打开另一个选项卡,消息将显示在另一个选项卡(可以是任何页面)中。我如何解决这个问题C# 不同选项卡中的TempData消息,c#,asp.net-mvc,asp.net-mvc-4,razor,razor-2,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,Razor 2,我想在我的页面中,在像RegisterUser这样的操作之后,向客户端发送一条消息以获取结果。所以我使用TempData(因为我使用的是RedirectToAction方法,所以我不能使用viewbag)。我的问题是,如果用户在同一时间打开另一个选项卡,消息将显示在另一个选项卡(可以是任何页面)中。我如何解决这个问题 @using (@Html.BeginForm("RegisterUser", "UserManagement", FormMethod.Post)) { @Html.
@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")
}
简单的解决方案。在RegisterUser控制器方法中,检查TempData中的值并将其传输到ViewData,然后让视图检查ViewData,该视图仅对该视图有效
[HttpGet]
public ActionResult RegisterUser()
{
if( TempData.ContainsKey( "MessageResult" )
{
ViewData["MessageResult"] = TempData["MessageResult"];
ViewData["cssClass"] = messageResult.cssClass;
}
return View(new User());
}
现在在视图中使用ViewData而不是TempData。用户是否在新选项卡中打开相同的操作url,即RegisterUser?他可以为此页面或任何其他页面执行此操作。如果用户在其他选项卡中打开另一页面,这有什么关系?您仅在单个视图上使用临时数据值,因此它将仅显示在该视图上。我在其他页面上使用此部分页面(_RegisterPagesMessage)。因此。。。。。
[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;
}
[HttpGet]
public ActionResult RegisterUser()
{
if( TempData.ContainsKey( "MessageResult" )
{
ViewData["MessageResult"] = TempData["MessageResult"];
ViewData["cssClass"] = messageResult.cssClass;
}
return View(new User());
}