mvc-从控制器传递数据到其他控制器的视图

时间:2015-07-24 05:05:11

标签: asp.net-mvc viewbag viewdata

我有一个Intent intent = getBaseContext().getPackageManager() .getLaunchIntentForPackage(getBaseContext().getPackageName()); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 我在此操作中有一个操作AccountController我正在使用YNHHConsentForm重定向到另一个视图。现在我想在Default页面的Index页面上显示一条消息。我尝试使用RedirectToAction("Index", "Default")ViewBag传递值,但它仍为ViewData,我无法在索引上使用其值。

的AccountController

null

指数(默认)

   public ActionResult YNHHConsentForm(YNHHFormVM model)
    {
        if (result == 0 || isSuccess == false)
        {
            model.FormSubmissionMessage = "Something went wrong please try again";
            return View(model);
        }
        else
        {
            SessionItems.IsAuthorizationFormFilled = true;
            //ViewBag.FormSubmissionMessage="Form submitted successfully";
            ViewData["FormSubmissionMessage"] = "Form submitted successfully";
            return RedirectToAction("Index", "Default");
        }
    }

我第一次使用 @if (ViewData["FormSubmissionMessage"] !=null) { <div class="alert alert-success"> ViewData["FormSubmissionMessage"].ToString() </div> } ViewBag,因此无法弄清楚我做错了什么。

2 个答案:

答案 0 :(得分:3)

您需要使用TempData。在YNHHConsentForm()方法

TempData["FormSubmissionMessage"] = "Form submitted successfully";
return RedirectToAction("Index", "Default");

并使用Index()方法访问它(并将其添加到(例如)ViewBag,以便您可以在视图中访问它。

ViewBag.MyMessage = TempData["FormSubmissionMessage"];

并在视图中

<div class="alert alert-success">@ViewBag.MyMessage</div>

有关ViewData ViewBagTempData之间差异的说明,请参阅this answer

附注:TempData仅持续一次重定向,因此如果用户刷新浏览器,则不会再次生成该消息。您可以使用.Keep().Peek()来解决此问题(如果有关键请参阅this answer了解详情)

答案 1 :(得分:2)

为了补充@ StephenMueke的答案,我通常会为您正在使用的场景创建一对组件(显示系统确认)。它包括:

  1. 包含状态/警报类型为字符串的静态类。
  2. 在布局上呈现的局部视图,以便消息位于一致的位置。
  3. 静态类看起来像这样:

    public class Alert
    {
        public static string Error = "alert-error alert-danger";
        public static string Info = "alert-info";
        public static string Warning = "alert-warning";
        public static string Success = "alert-success";
    
        public static string[] All = new string[]{ Error, Info, Warning, Success };
    }
    

    基本上,这些是Bootstrap警报类,但它们非常通用,可以在没有Bootstrap的情况下工作。 Alert.Error值包含两个“类”,使其与Bootstrap的版本2和版本3兼容。

    部分视图检查TempData Alert值,如果找到则生成Bootstrap警报:

    @foreach (string key in Alert.All)
    {
        if (TempData.ContainsKey(key))
        {
            <div class="alert @key">
                <button type="button" class="close" data-dismiss="alert"><i class="fa fa-fw fa-times"></i></button>
                @Html.Raw(TempData[key])
            </div>
        }
    }
    

    我使用Html.Raw以便我可以在邮件中包含标记,如果我想强调部分邮件:

    TempData.Add(Alert.Success, "<b>Thank you!</b> Form submitted successfully!");
    

    将呈现为:

      

    谢谢!表单已成功提交!