ASP.net MVC создает модель со значением с несколькими вариантами - PullRequest
2 голосов
/ 10 июня 2011

Я хочу создать модель со свойством Service, которая затем имеет несколько опций, которые могут быть либо истинными, либо ложными. Итак, мой класс контактов:

public class Contact
{
    //My Properties
}

Я хочу, чтобы класс Contact имел свойство Services. У меня есть список доступных услуг. Как я могу ссылаться на мои услуги из моего класса контактов. Я хотел бы иметь возможность получить к нему доступ, на мой взгляд, как: model.services.MyCustomService, если это возможно. Я пришел из фона JavaScript, так что это то, что я имею в виду, но написано на JavaScript, если это помогает.

Пример Javascript

var Contact = {
    property: "",
    services: {
        MyCustomService: "",
        MyCustomService2: "",
    }
}

Ответы [ 3 ]

2 голосов
/ 11 июня 2011

В C # каждый объект имеет тип, поэтому свойство Services должно иметь фактический тип , если вы хотите сослаться на MyCustomService и MyCustomService2 через точечную запись:

class Contact {
    public ServiceContainer Services { get; set; }
}

class ServiceContainer {
    public Service1 Service1 { get; set; }
    public Service2 Service2 { get; set; }
}

Однако, если контейнер служит не для каких-либо других целей, кроме как для хранения службы (при условии, что это какой-то объект), вам, вероятно, следует хранить их в списке или массиве (доступ по индексу) или в словаре (доступ по строке).

Чтобы дать вам больше информации, мне нужно знать , что такое , что это за услуги, ожидаете ли вы, что их набор изменится, будут ли они разных типов и т. Д.

2 голосов
/ 11 июня 2011

Вот как бы я это сделал:

В вашей модели:

public class Contact
{
    //My Properties

    public List<Service> Services
    {
        get;
        set;
    }
}

В вашем контроллере:

public ActionResult Index()
{
    var model = new Contact(); // Create model

    // Create some sample services
    var service = new Service();
    var service2 = new Service();

    // Add the services
    model.Services.Add(service);
    model.Services.Add(service2);

    // Pass the model to the view
    return View(model);
}

Тогда, по вашему мнению:

@model MySite.Models.Contact

@foreach (var service in Model.Services)
{
    <text>Here's my service: @service.MyCoolProperty.ToString()</text>
}

В этом простом примере я сначала объявил свойство Services вашего класса Contact как List<Service>. Это позволяет объединять несколько служб в одно свойство - идеально подходит для передачи в представление.

Затем в контроллере я добавил некоторые службы в список с помощью метода Add(). Поэтому в представлении вы теперь можете получать доступ к этим службам через Model.Services.

Для меня это выглядит как один из самых простых способов решения этой общей проблемы. Надеюсь, что это помогло!

0 голосов
/ 10 июня 2011

Для привязки к коллекции все, что вам нужно, это:

<%@ Page Inherits="ViewPage<IList<Book>>" %>

Полное объяснение можно найти здесь:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...