Подтвердить что ты не робот

ASP.NET MVC ViewModel с методами - это "законно"?

Если видимые модели ограничены только свойствами, а не методами?

Скажем, у меня есть радиокнопка на мой взгляд и вы хотите проверить, следует ли проверять радиокнопку.

Я мог бы сделать это полностью на мой взгляд:

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

или я мог бы переместить эту логику в viewmodel:

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id)

используя этот метод в viewmodel:

    public int PersonId { get;set;}
    public bool IsChecked(int id)
    {
        return (id == PersonId);
    }

Это нормально делать, или это должно быть сделано полностью в представлении или каким-либо другим способом?

4b9b3361

Ответ 1

Вы можете иметь методы в вашей ViewModel. Если это единственный результат, который вы хотите вычислять каждый раз, тогда я бы предложил добавить код оценки в ваш Controller и вместо этого сохранить результат в ViewModel но если вам нужно оценивать вещи, используя метод более динамически, а свойство не может это сделать это для вас тогда делать это во ViewModel, вероятно, хорошо.

В приведенном выше примере я бы порекомендовал сделать это в ViewModel как тогда ViewModel содержит логику в одном месте, а не многократно копировать и вставлять в ваш View.

Ответ 2

Это действительно хороший вопрос относительно правильного размещения логики. Ваш подход, безусловно, легален, но придерживается ли он принципа MVC?:)

Я бы сказал, что это зависит от того, применяется ли логика в вашем методе только к этой View/ViewModel или может быть потенциально применена к другим ViewModels, которые имеют дело с этим базовым типом модели (в вашем случае Person).

Если это одноразовый расчет для этой конкретной модели ViewModel, сохраните ее в модели. Если этот расчет может использоваться для объектов Person в целом, рассмотрите возможность использования статического класса службы, например. PersonService и разместите там свои методы.