c# - 使用 TempData 从 MVC 操作向 ViewBag 添加字符串值时出现问题

标签 c# asp.net-mvc

我继承了一个 MVC 项目,其中如果调用的操作正确完成,页面应该显示一条消息,指示成功。我遇到了一些麻烦,因为我对 MVC 和 Web 开发非常陌生。

在 cshtml 文件中,MainWindow.cshtml 中有以下内容,如果 ViewBag 中存在名为“SavedMessage”的字符串且不为 null 或空,则仅在条件中呈现表格:

@{ string actionResult = ViewBag.SavedMessage; }
@if (!string.IsNullOrEmpty(actionResult))
{
    <tr>
         <td>
             @actionResult
         </td>
    </tr>
}

在 Action 方法中,我尝试使用 TempData 对象将字符串值传输到生成 View 的 Action:

public partial class ApproveController : Controller
{
    const string IDX_ACTIONRESULT = @"ActionResult";

    public ActionResult MyAction(FormCollection collection)
     {
         try
         {
             string result_success = @"Action completed successfully";
             //Do stuff
             TempData[IDX_ACTIONRESULT] = result_success;
             return RedirectToAction("MainWindow");
         }
         catch (Exception e)
         {
             Logger.reportException(e);
             throw e;
         }
     }
 }

在生成页面的 Action 中,我们将 TempData 中存储的值加载到变量中,然后测试该变量是否包含任何内容(注意:无论用户是否刚刚登陆这里,都使用相同的 Action 来渲染页面,或者他们单击了执行 MyAction 的按钮)。如果变量不为 null,我们会将其包含的所有内容加载到 ViewBag 中。

创建 View 操作:

public partial class ApproveController : Controller
{
    public ActionResult MainWindow()
    {
        //Do Stuff
        var actionResult = TempData[IDX_ACTIONRESULT];
        if (actionResult != null)
        {
            Log.info("Action Result Message: " + actionResult);
            ViewBag.SavedMessage = actionResult;  
        }
        else
            Log.info("Action Result Message is NULL");


        return View();
    }
}

可能的原因:当通过从 MyAction() 重定向以外的方式调用 MainWindow() 方法时,我的日志表明 actionResult 为空,但是,当通过从 MyAction 重定向调用它时(),actionResult是一个空字符串。这让我相信 MyAction() 正在用一些东西填充 TempData,但我不明白为什么它不包含我分配的字符串。有人在这里看到确凿的证据吗?

最佳答案

return RedirectToAction("CreateViewAction", new { @SavedMessage = savedMessage });

以上代码将引导用户进入 CreateViewAction 页面,其中查询字符串中包含消息。问题是用户可以看到 URL 中的消息,这有点难看。

enter image description here

在 ASP.NET MVC 中的页面之间传递数据的最简单方法是使用 TempData

public ActionResult MyAction(FormCollection collection)
{
    TempData["SuccessMessage"] = @"Action completed successfully";
    //Do stuff
    return RedirectToAction("CreateViewAction");
}

public ActionResult CreateViewAction()
{
    ViewBag.SavedMessage = TempData["SuccessMessage"] ?? "Successfully!!!";
    return View();
}

关于c# - 使用 TempData 从 MVC 操作向 ViewBag 添加字符串值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53120793/

相关文章:

c# - 如何检索多个txtBox的值并在新页面中显示总和?

c# - 表单提交取消 jQuery ajax 调用

c# - 在删除项目后添加成功消息,在 MVC4 中

c# - 在 Microsoft IIS 服务器上部署 ASP.NET MVC 应用程序失败

asp.net - 自动化功能性 Web GUI 测试框架 (asp.net)

c# - 使用 C# EF Core 返回具有空子级的父级。包括

c# - 将控件设置为最顶部的 silverlight

C# 和 EF 无法将相关实体添加到模型

javascript - 在 mvc4 中访问 javascript 中的临时数据

javascript - 带有大列表的 Ajax 进度条