Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不同选项卡中的TempData消息_C#_Asp.net Mvc_Asp.net Mvc 4_Razor_Razor 2 - Fatal编程技术网

C# 不同选项卡中的TempData消息

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.

我想在我的页面中,在像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")
}

简单的解决方案。在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());
}