如何在ASP.NET中从控制器传递值到视图?

11

我正在开发一个应用程序,需要从控制器将用户名的值传递到视图中。 我尝试了在http://msdn.microsoft.com/en-us/library/system.web.mvc.viewdatadictionary.aspx中提供的 ViewData。

我的控制器代码如下:

public ActionResult Index(string UserName, string Password)
{
        ViewData["UserName"] = UserName;
        return View();
}

其中的用户名和密码是从另一个表单中获取的。

而视图中的代码为

@{
    ViewBag.Title = "Index";  
}
<h2>Index</h2>
<%= ViewData["UserName"] %>

然而当我运行这段代码时,显示的是<%= ViewData["UserName"] %>,而不是实际的用户名,比如说"XYZ"。

我应该如何显示实际的用户名呢?

非常感谢您提前的帮助。

3个回答

13
您正在使用 Razor 语法,但尝试将其与较旧的 ASP.NET 语法混合使用,请使用:
@ViewData["UserName"] 

通常情况下,您不会使用视图包(View Bag)将数据传递到视图中。 标准做法是创建一个模型(标准类),其中包含您的 View(页面)所需的所有数据,并从控制器将该模型传递给视图(return View(myModel);)。

为此,您还需要在视图中声明正在使用的模型类型。

@model Full.Namespace.To.Your.MyModel

阅读 http://msdn.microsoft.com/en-us/gg618479 了解基本的MVC模型教程。


6

看起来你正在使用 Razor 视图引擎,而不是 Web Forms 视图引擎。请尝试使用以下方式:

@{ 
    ViewBag.Title = "Index";   
} 
<h2>Index</h2> 
@ViewData["UserName"]

0
"

'ViewBag'是MVC2的遗留物。MVC3开发应该使用强类型的'ViewModel'。

"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接