带有方法的ASP.NET MVC ViewModel - 它是"合法的"吗?

Bug*_*tor 23 asp.net-mvc viewmodel

视图模型应该仅限于属性,而不是方法吗?

假设我的视图中有一个单选按钮,想要查看是否应该选中单选按钮.

我完全可以在我看来这样做:

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 
Run Code Online (Sandbox Code Playgroud)

或者我可以将此逻辑移动到viewmodel中:

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id)
Run Code Online (Sandbox Code Playgroud)

在viewmodel中使用此方法:

    public int PersonId { get;set;}
    public bool IsChecked(int id)
    {
        return (id == PersonId);
    }
Run Code Online (Sandbox Code Playgroud)

可以这样做,还是应该完全在视图中或以其他方式完成?

Chr*_*den 13

你可以有自己的方法ViewModel.如果它是你想要每次计算的单个结果,那么我建议你将评估代码添加到你的中Controller并将结果存储在ViewModel相反的内容中,但如果你需要更动态地使用方法来评估事物而且属性不能用于你这样做ViewModel可能没问题.

在你上面的例子中,我建议你这样做ViewModel,然后ViewModel在一个地方包含逻辑,而不是多次复制和粘贴你的View.


Jam*_*ack 5

关于正确放置逻辑,这确实是一个很好的问题。您的方法当然是合法的 -但是它遵循MVC的精神吗?:)

我会说这取决于您方法中的逻辑是仅适用于此View / ViewModel,还是可能适用于处理此基础Model类型的其他ViewModel(在您的情况下为Person)。

如果对于此特定ViewModel而言,这是一次性计算,则将其保留在Model中。如果此计算通常可用于Person对象,请考虑使用静态Service类,例如PersonService,然后将您的方法放在那里。