在ASP.NET MVC中使用值类型作为部分视图中的模型

时间:2009-03-12 00:34:58

标签: asp.net-mvc value-type

有没有办法使用这样的东西:System.Web.Mvc.ViewUserControl<DateTime>?我得到一个例外,类型是值类型,而不是引用类型。解决这个问题的正确方法是什么?感谢。

修改

我想要实现的是拥有一个控件,它需要DateTime来呈现日历。我想使用MVC的“点符号”从我的ViewData传入DateTime

修改2

我听说/看到一些MvcContrib项目可能具备此功能,但我似乎无法再找到它。

1 个答案:

答案 0 :(得分:4)

无法解决此问题 - 只有解决方法。您不能在ViewUserControl中将值类型包含为TModel,因为TModel具有作为引用类型的约束。

简单的解决方法是将您的值类型包装在类中作为模型。

class MyModel {
  public DateTime? DateTime {get;set;}
}

通过定义您自己的类,如上面的MyModel,您现在可以将DateTime传递给您的视图,如此

ActionResult MyActionMethod() {
  var db = new MyDataContext();
  var dbThing = db.Things.Where(t=> t.DateTimeProperty>=DateTime.Now).First();
  return View("myView", new MyModel{DateTime = dbThing.DateTimeProperty});
}

您的视图当然需要将MyModel定义为模型类型,如此

public partial class MyView:ViewUserControl<MyModel> {
 //snip
}

在View中,只需引用DateTime属性即可访问DateTime。

<%=Model.DateTime%>