如何在ASP.net MVC中从控制器传递数据到视图?

4

ASP.net MVC。

我需要做的对于我认识的每个人来说都很简单。 我需要在ASP.net MVC中在控制器之间传递数据以在视图中查看。

我编写的控制器代码。

public ActionResult Upload()
{

    ViewBag.Message = "Make a quiz Question here";
    ViewData["CurrentTime"] = DateTime.Now.ToString();
    return View();
}

这是我在视图中添加的代码。

<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<div>
    <%: ViewData["CurrentTime"] %>
</div>

但是当我运行这个程序时,它显示:
<%: ViewData["CurrentTime"] %> 

我需要的是currenttime的值。


4
@ViewData["CurrentTime"] 可以翻译为“当前时间”,建议使用模型替代现有方案。 - user3559349
1
你使用的是 Razor 引擎还是 ASPX 引擎? - Mairaj Ahmad
3
在你的视图中,只需使用@DateTime.Now即可,或者我有所遗漏吗? - Andreas Fredriksson
3个回答

4
您无需从控制器传递当前时间等数据。只需编写以下代码即可:
<div>
    @DateTime.Now
</div>

在您的视图中,如果服务器渲染,则会将其呈现为@DateTime.Now的值。

此外,您可以使用ToString方法来格式化您的视图:

<div>
    @DateTime.Now.ToString("yyyy.MM.dd")
</div>

将被渲染为

<div>
    2016.06.14
</div>

请注意,代码将显示服务器时间,可能与客户端的时区不同。要显示当前时间,您应该使用JS代码
这不是静态数据,但也不是真正的模型或业务数据,可以在视图中计算而无需输入参数。消息也不是模型和控制器相关数据,可以在视图中硬编码或从模型数据中检索。
<h3>Make a quiz Question here</h3>

如果您需要从控制器实际传递数据,并且其数据取决于内部状态或输入控制器参数或具有其他“业务数据”的属性,则应使用 MVC 模式 中的 Model 部分:

Model 对象是应用程序的一部分,实现应用程序数据领域的逻辑。通常,模型对象在数据库中检索和存储模型状态。例如,Product 对象可能从数据库中检索信息,对其进行操作,然后将更新后的信息写回到 SQL Server 数据库中的 Products 表中。

您可以在此处查看详细信息,或查看微软教程中的 ASP.NET MVC 中的 Models 和 Validation 部分。
  1. Add model class:

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public string Street { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int Zipcode { get; set; }
    }
    
  2. Pass model object to the view:

    public ActionResult Index()
    {
        var model = GetModel();
        return View(model);
    }
    
  3. Add strongly typed View via define model type:

    @model Person
    
  4. Use Model variable in your view:

    @Model.City
    

这不仅仅是DateTime的问题...同样,我想要传递变量。 比如: ViewData["myname"] = "Vishwa raj"; - Vishwa Raj
1
@VishwaRaj,我更新了我的回答,提供了MVC模式的简单示例,并附上了有关ASP.NET MVC的Microsoft教程链接。 - Vadim Martynov

1
你可以将值(包括复杂对象)作为model传递,例如一个DateTime对象。
public ActionResult Upload()
{

    ViewBag.Message = "Make a quiz Question here";
    return View(DateTime.Now);

}

在第一行中,您需要定义模型具有哪种数据类型。然后,您可以通过Model.something访问它:

@model System.DateTime

<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<div>
    @Model.ToString()
</div>

这里有一个可执行的示例:https://dotnetfiddle.net/mIgpJL


1

您正在混合使用Razor和ASPX语法。请将您的视图更改为:

<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<div>
    @ViewData["CurrentTime"]
</div>

我建议阅读关于ViewBag和ViewData以及Razor模型绑定的相关内容。

谢谢大家。 最终我解决了我的问题。 - Vishwa Raj

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