ASP.NET MVC 2 DisplayFor()
-
13-09-2019 - |
Вопрос
Я смотрю на новую версию ASP.NET MVC (смотрите здесь более подробную информацию, если вы ее еще не видели), и у меня возникли довольно простые проблемы с отображением содержимого объекта.
В моем контроле у меня есть объект типа Person
, который я передаю представлению в ViewData.Model
.Пока все хорошо, и я могу извлечь объект в виде, готовом к отображению.Однако чего я не понимаю, так это того, как мне нужно вызвать Html.DisplayFor()
метод для того, чтобы вывести данные на экран.Я попробовал следующее...
<%
MVC2test.Models.Person p = ViewData.Model as MVC2test.Models.Person;
%>
// snip
<%= Html.DisplayFor(p => p) %>
но я получаю следующее сообщение:
CS0136:Локальная переменная с именем 'p' не может быть объявлена в этой области, потому что это придало бы другое значение 'p', которое уже используется в 'родительской или текущей' области для обозначения чего-то другого
Я знаю, что это не то, что я должен делать - я знаю, что переопределение переменной приведет к этой ошибке, но я не знаю, как получить доступ к объекту из контроллера.Итак, мой вопрос в том, как мне передать объект в представление, чтобы отобразить его свойства?
Н.Б.Я должен добавить, что я читаю об этом в свое ограниченное свободное время, так что вполне возможно, что я упустил что-то фундаментальное.
ТИА
Решение
Html.DisplayFor
может использоваться только в том случае, если ваше представление строго типизировано и работает с объектом, который был передан в представление.
Итак, в вашем случае вы должны объявить свое представление с типом Person в качестве типа модели (например something.something.View<Person>
) (извините, я не помню точных названий, но это должно иметь смысл), а затем при вызове Html.DisplayFor(p => p)
, p
принял бы значение переданного значения модели (Person) в представление.
Надеюсь, это имело смысл.
Другие советы
p - это уже имя переменной;и имена переменных должны быть уникальными во всей текущей области.Следовательно, DisplayFor(p=>p) недопустим, поскольку вы объявляете там новую переменную 'p'.Таким образом, компилятор не знает, использовать ли ваш Person p или переменную (p =>).
Так что просто переименуйте его в
<%= Html.DisplayFor(person => person) %>