Как использовать анонимный список в качестве модели в частичном представлении ASP.NET MVC? - PullRequest
10 голосов
/ 02 июля 2011

У меня есть список 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 ]

17 голосов
/ 03 июля 2011

Не делай этого. Не передавайте анонимные объекты своим взглядам. Их свойства являются внутренними и не видны в других сборках. Представления динамически компилируются в отдельные динамические сборки средой выполнения 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>
1 голос
/ 08 ноября 2013

Используйте 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"))

Надеюсь, что поможет

...