TempData的消息在不同的标签 [英] TempData Message in different tab

查看:71
本文介绍了TempData的消息在不同的标签的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的网页后,像RegisterUser一个动作一个口信给客户端result.so我使用TempData的(becase的我使用RedirectToAction方法我不能使用viewbag)。我的问题是,如果用户打开同一时间消息的另一个选项卡将在另一个选项卡中显示(任何页面就可以)我。怎么能解决?

  @using(@ Html.BeginForm(RegisterUser,UserManagement,FormMethod.Post))
{
    @ Html.AntiForgeryToken()
   @ Html.Partial(_ RegisterPagesMessage)
    <表类=Registertbl>
        &所述; TR>
            < TD>نام* LT; / TD>
            &所述; TD> @ Html.TextBoxFor(M = GT; m.FName,新{最大长度= 20})LT; BR />
            < / TD>
            < TD>سمت* LT; / TD>
            < TD> @ Html.TextBoxFor(M = GT; m.Post,新{最大长度= 200})< / TD>
        < / TR>
    < /表>
    < BR />
        <输入类型=提交值=插入级=insertBtn/>
        @ Html.ActionLink(后退,ViewUserList,UserManagement)
}

// _ RegisterPagesMessage

  @if(TempData的[MessageResult中] == NULL)
{
    < D​​IV ID =ErrorContent级=MSG-红的风格=显示:无;>< / DIV> < BR />
}
其他
{
    < D​​IV ID =ErrorContent级=@ TempData的[的CssClass]>
            @ Html.Label(TempData的[MessageResult中]作为字符串)
    < / DIV> < BR />
}

//控制器

  [HTTPGET]
    公众的ActionResult RegisterUser()
    {
        返回查看(新用户());
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    公众的ActionResult RegisterUser(Common.UsersManagement.Entities.User模型)
    {
        SetUserManagement();
        VAR结果= userManagement.RegisterUser(模型);
SetMessage(Result.Mode.ToString());
        如果(Result.Mode == Common.Extensions.ActionResultMode.Successfully)
        {
                返回RedirectToAction(RegisterUser);
        }
         //如果不是全成
        返回查看(模型);
    }
  保护无效SetMessage(字符串模式)
        {
            VAR MessageResult中= XmlReader.FindMessagekey(模式);
            TempData的[MessageResult中] = messageResult.MessageContent;
            TempData的[的CssClass] = messageResult.cssClass;
        }


解决方案

简单的解决方案。在对TempData的价值你RegisterUser控制器的方法检查,并转移到ViewData的,然后有观检查ViewData的,只为生存的一种观点。

  [HTTPGET]
公众的ActionResult RegisterUser()
{
    如果(TempData.ContainsKey(MessageResult中)
    {
        计算机[MessageResult中] = TempData的[MessageResult中];
        计算机[的CssClass] = messageResult.cssClass;
    }    返回查看(新用户());
}

现在在视图中使用的ViewData,而不是TempData的。

i want in my page after an action like RegisterUser give a message to client for result.so i use TempData(becase i use RedirectToAction method i cant use viewbag).my problem is that if user open another tab in same time message will show in another tab(any page it can be).how can i solve that??

  @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 />   
}

//Controller

 [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;
        }

解决方案

Easy solution. In your RegisterUser controller method check for a value in TempData and transfer it to ViewData, then have the View check the ViewData, which only survives for that one view.

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

    return View(new User());
}

Now in the view use ViewData instead of TempData.

这篇关于TempData的消息在不同的标签的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆