我希望在我的页面中,像RegisterUser这样的动作向客户端发送消息结果。所以我使用TempData(因为我使用RedirectToAction方法我不能使用viewbag)。我的问题是,如果用户在同一时间打开另一个标签消息将显示在另一个标签中(它可以是任何页面)。我可以解决这个问题吗?
@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 :(得分: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。