Как использовать анонимный список в качестве модели в частичном представлении ASP.NET MVC?
У меня есть список Contact
объекты, из которых я просто хочу подмножество атрибутов. Поэтому я использовал проекцию LINQ для создания анонимного списка и передал его частичному представлению. Но когда я использую этот список в частичном представлении, компилятор говорит, что у него нет этих атрибутов. Я попробовал самый простой случай, как указано ниже, но все же у меня нет шансов использовать анонимный объект или список в частичном представлении.
var model = new { FirstName = "Saeed", LastName = "Neamati" };
return PartialView(model);
А внутри частичного вида у меня есть:
<h1>Your name is @Model.FirstName @Model.LastName<h1>
Но это говорит о том, что @Model не имеет свойств FirstName и LastName. Что здесь не так? Когда я использую @Model, эта строка будет отображаться в браузере:
{ Title = "Saeed" }
2 ответа
Не делай этого. Не передавайте анонимные объекты своим взглядам. Их свойства являются внутренними и не видны в других сборках. Представления динамически компилируются в отдельные динамические сборки средой выполнения ASP.NET. Так что определите модели представлений и строго напишите ваши представления. Как это:
public class PersonViewModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
а потом:
var model = new PersonViewModel
{
FirstName = "Saeed",
LastName = "Neamati"
};
return PartialView(model);
и по вашему мнению:
@model PersonViewModel
<h1>Your name is @Model.FirstName @Model.LastName<h1>
Используйте Reflection, чтобы получить значения, преформанс немного медленнее, но не нужно создавать неестественные модели
Добавьте следующий класс в ваше приложение
public class ReflectionTools
{
public static object GetValue(object o, string propName)
{
return o.GetType().GetProperty(propName).GetValue(o, null);
}
}
на ваш взгляд используйте следующий код
@(WebUI.Tools.ReflectionTools.GetValue(Model, "Count"))
надеюсь, это поможет