如何将System.String数据传递给强类型视图?

时间:2011-02-02 08:27:46

标签: asp.net-mvc

我的想法是将字符串数据传递给强类型视图,如下所示:

控制器:

 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

然而,它不起作用。

如何让它发挥作用?

编辑1

我可以通过向下messageobject投降,如下所示:

return View((object)message);

2 个答案:

答案 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>