Использование типа значения в качестве модели в частичном представлении в ASP.NET MVC - PullRequest
0 голосов
/ 12 марта 2009

Есть ли способ использовать что-то вроде этого: System.Web.Mvc.ViewUserControl<DateTime>? Я получаю исключение, что тип является типом значения, а не ссылочным типом. Как правильно решить эту проблему? Благодаря.

Редактировать

То, что я пытаюсь сделать, - это иметь элемент управления, который требует DateTime для отображения календаря. Я хочу передать DateTime из моего ViewData, используя "точечную нотацию" для MVC.

Редактировать 2

Я слышал / видел, что некоторые проекты MvcContrib могут иметь эту возможность, но я не могу найти ее снова.

1 Ответ

4 голосов
/ 12 марта 2009

Нет способа решить эту проблему - только обходные пути. Вы не можете включать типы значений как TModel в ViewUserControl, так как 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%>
...