在Razor的Tempdata

时间:2013-11-20 03:16:56

标签: asp.net-mvc asp.net-mvc-4 razor

学习MVC创建一个简单的日期时间注册表单。我正在尝试为用户制作两个文本框。一个用于约会,一个用于时间。

我将在我的模型中的单个dateTime字段中保存这两个值。

所以我需要弄清楚如何在tempdata中存储一个表单字段,以便在发布时在控制器中访问。然后,我可以将两个文本框组合在一起,使dateTime存储在我的模型中。

我知道如何在控制器中获取tempdata,它只是形式上的剃刀语法我不能理解。

提前致谢。

2 个答案:

答案 0 :(得分:1)

TempData不适合您的目的。您无法在视图中为TempData / ViewData分配值。您只能在控制器中为TempData / ViewData分配值,并在View中访问这些值。有关详细信息,请参阅此问题:TempData moving from view to controler

我建议您在场景中使用ViewModel,其中包含视图中所需的所有属性。请查看Mariusz在ASP.NET MVC - How exactly to use View Models

给出的答案

答案 1 :(得分:0)

我认为更好的做法是让视图模型包含您希望从表单传递给控制器​​的所有信息。

查看型号:

public class MyViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string Date { get; set; }
    public string Time { get; set; }
}

<强>控制器:

public ActionResult Signup()
{
    var m = new MyViewModel();
    return View(m);
}

[HttpPost]
public ActionResult Signup(MyViewModel m)
{
    var username = m.Username;
    var password = m.Password;
    var date = m.Date;
    var time = m.Time;
    // ...
}

查看:

@model MvcApplication5.Controllers.MyViewModel

@* ... *@

@using (Html.BeginForm())
{

    @Html.TextBoxFor(m => m.Username)
    @Html.PasswordFor(m => m.Password)
    @Html.TextBoxFor(m => m.Date)
    @Html.TextBoxFor(m => m.Time)

    <input type="submit" value="Submit" />

}