我的想法是将字符串数据传递给强类型视图,如下所示:
控制器:
public ActionResult Confirmation()
{
string message = TempData["message"] as string;
if (message != null)
return View(message);//it does not work
else
return RedirectToAction("Index");
}
查看:
@Model System.String
@{
ViewBag.Title = "Confirmation";
}
<h2>
Confirmation</h2>
@Model
然而,它不起作用。
如何让它发挥作用?
我可以通过向下message
向object
投降,如下所示:
return View((object)message);
答案 0 :(得分:3)
我认为MVC在这里有点混乱。它不起作用,因为它会尝试返回当时Message中的ViewName。
您可以使用至少三个重载:
return View(string viewName);
// or..
return View(object model); // this is the one you're trying to use
// or..
return View(string viewName, object model);
在你的情况下,MVC正在尝试做第一个但是使用你的变量Message作为视图名称。尝试将其更改为强制它使用正确的重载:
return View("Confirmation", message);
..然后看看会发生什么。
编辑:没有意识到你没有使用索引动作;更新了示例,但重点仍然相同。
答案 1 :(得分:1)
为什么不尝试使用ViewBag属性将字符串传递给视图或使用字符串属性创建ViewModel:
public class ConfimationModel
{
public string Message{get;set;}
}
public ActionResult Confirmation()
{
string message = TempData["message"] as string;
//Model Option
var model = new ConfirmationModel();
model.Message = message;
if (message != null)
return View(model);
else
return RedirectToAction("Index");
//ViewBag Option
ViewBag.Message = message;
if (message != null)
return View();
else
return RedirectToAction("Index");
}
View:
@Model ConfimationModel
@{
ViewBag.Title = "Confirmation";
}
<h2>@Model.Message</h2>
OR
<h2>@ViewBag.Message</h2>