Asp.Net MVC设置ViewModel属性值

本文关键字:属性 ViewModel 设置 Net MVC Asp | 更新日期: 2023-09-27 18:12:01

我有一种情况,我必须根据某些情况更新视图模型属性。要更新的viewmodel属性是基于IsPrintableFlag()结果的IsPrintable。目前我正在更新属性从控制器喜欢模型。IsPrintable = model。IsPrintableFlag(项目,页面);

我的问题是而不是更新视图模型属性从控制器,我们有选项来设置属性值在视图模型?

ViewModel代码:

public bool IsPrintable { get; set; }
public bool IsPrintableFlag(IList<Items> items,IList<Pages> pages )
        {
            switch (id)
            {
                case 1:
                case 2:
                    if (!pages.Any())
                    {
                        return pages.Any();
                    }
                    break;
                case 3:
                    return false;
                default:
                    return false;
            }
            return false;
        }
控制器代码:

model.IsPrintable = model.IsPrintableFlag(items, pages);

Asp.Net MVC设置ViewModel属性值

视图模型不应该真正包含逻辑,它应该只包含视图所需的数据。在控制器中填充视图模型是可以的。

我建议你引入一个服务层来封装这种类型的逻辑,例如

public class MyDomainService
{
    public bool IsPrintable(IList<Items> items, IList<Pages> pages)
    {
        return ...;
    }
}
...
model.IsPrintable = domainSvc.IsPrintable(items, pages);

或者您可以扩展它以返回一个完全填充的视图模型

public MyViewModel GetViewModel(...)
{
    var model = ...;
    model.IsPrintable = this.IsPrintable(items, pages);
    return model;
}

我找到了我的问题的答案,想分享一下,以便对许多可能面临类似问题的人有用。

你甚至可以在你的IsPrintableFlag()方法中设置值,这样你就不需要返回一个布尔值了:

// Define this method within your ViewModel class
public void SetPrintableFlag(IList<Items> items, IList<Pages> pages)
{
      // Assuming id is a property of your ViewModel class
      switch (id)
      {
                case 1:
                case 2:
                    // If there aren't any pages
                    if (!pages.Any())
                    {
                        // Then set your flag to the opposite (you could likely return true here instead)
                        IsPrintableFlag = pages.Any();
                    }
                    break;
                case 3:
                default:
                    IsPrintableFlag = false;
      }
}

控制器代码
model.SetPrintableFlag(items,pages);