2009-09-23 3 views
2

Я смотрю новую версию ASP.NET MVC (см. Здесь для получения более подробной информации, если вы ее еще не видели), и у меня есть довольно простые проблемы с отображением содержимое объекта.ASP.NET MVC 2 DisplayFor()

У меня есть объект типа Person, который я перехожу к просмотру в ViewData.Model. Пока все хорошо, и я могу извлечь объект в представлении, готовом для отображения. Что я не понимаю, так это то, как мне нужно вызвать метод Html.DisplayFor(), чтобы получить данные на экран. Я попытался следующие ...

<% 
    MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person; 
%> 
// snip 
<%= Html.DisplayFor(p => p) %> 

, но я получаю следующее сообщение:

CS0136: локальная переменная с именем «р» не может быть объявлен в этой области, потому что это дало бы другой смысл «р», который уже используется в «родителя или текущей области видимости для обозначения чего-то еще

Я знаю, что это не то, что я должен делать - я знаю, что переопределение переменной будет производить эту ошибку, но я не знаю, как получить доступ к объекту с контроллера. Итак, мой вопрос: как передать объект в представление, чтобы отобразить его свойства?

N.B. Я должен добавить, что я читаю об этом в свое ограниченное свободное время, так что вполне возможно, что я пропустил что-то фундаментальное.

TIA

ответ

6

Html.DisplayFor может использоваться только тогда, когда ваш взгляд сильно типизированных, и он работает на объекте, переданном в View.

Итак, для вашего случая вы должны объявить свой вид с типом Person как его тип модели (например, something.something.View<Person>) (извините, я не помню точных имен, но это должно иметь смысл), а затем, когда вызывающий Html.DisplayFor(p => p), p примет значение пройденной модели (Person) в представлении.

Надейтесь, что сделал смысл.

+0

Спасибо за это. Когда я вернусь в офис, я дам ему завтрашний день. :) – ZombieSheep

+0

Отличный ответ. Спасибо, это сработало (но вы уже это знали, не так ли?)) – ZombieSheep

+0

Собственно, я этого не делал. Ну, не совсем так или иначе. В настоящее время я изучаю ASP.NET MVC 1.0, но я прочитал несколько статей о версии 2.0 и вспомнил, что прочитал что-то на Html.DisplayFor; некоторый Googling помог с фактическим синтаксисом и whatnot :) – AASoft

1

p - это переменное имя; и имена переменных должны быть уникальными во всей текущей области. Поэтому displayFor (p => p) недействителен, так как вы объявляете новую переменную 'p'. Таким образом, компилятор не знает, использовать ли ваш персонаж p или переменную (p =>).

Так просто переименовать его в

<%= Html.DisplayFor(person => person) %> 
+1

Благодарим за ответ, но то, что я на самом деле, - это как получить доступ к объекту, который я перешел к представлению в ViewData.Model в методе DisplayFor. Redeclaring как новая переменная не достигает этой цели. – ZombieSheep

Смежные вопросы