【发布时间】:2019-04-06 19:54:12
【问题描述】:
我继承了一个 MVC 项目,如果调用的操作正确完成,页面应该显示一条指示成功的消息。我遇到了一些麻烦,因为我对 MVC 和 Web 开发很陌生。
在 cshtml 文件中,我们在 MainWindow.cshtml 中有以下内容,它仅在 ViewBag 中存在名为“SavedMessage”的字符串且不为 null 或空的情况下以条件渲染表格:
@{ string actionResult = ViewBag.SavedMessage; }
@if (!string.IsNullOrEmpty(actionResult))
{
<tr>
<td>
@actionResult
</td>
</tr>
}
在 Action 方法中,我尝试使用 TempData 对象将字符串值传输到生成视图的 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)。如果变量不为空,我们将它包含的任何内容加载到 ViewBag 中。
创建视图操作:
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();
}
}
可能的线索: 当 MainWindow() 方法通过 MyAction() 的 Redirect 以外的方式调用时,我的日志显示 actionResult 为空,但是,当它通过 MyAction 的 Redirection 调用时(),actionResult 是一个空字符串。这让我相信 MyAction() 正在用 something 填充 TempData,但我不明白为什么它不包含我分配的字符串。有人看到这里有吸烟枪吗?
【问题讨论】:
-
该控制器上是否有另一个名为 MyView 的方法接收参数?
-
除了您在此处发布的方法之外,控制器中是否还有另一种称为
CreateViewAction的方法?此外,您应该使用string.IsNullOrWhiteSpace而不是savedMessage != null && savedMessage.Length > 0。 -
是的,有一个方法叫做 CreateViewAction。实际上,我刚刚更新了问题以反映这一点。
-
您是否阅读了我对重定向后实际用于渲染的视图的评论?
-
好的,谢谢。我知道我正在查看正确的视图,因为我已经能够对其进行并确认其他小的更改。我在 CreateViewAction 方法中添加了一些日志记录,可以确认 SavedMessage 参数肯定为空,因此 cshtml 条件按预期工作。
标签: c# asp.net-mvc