我继承了一个 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 中的消息,这有点难看。
在 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/