【问题标题】:ViewModels inside a ViewModelViewModel 中的 ViewModel
【发布时间】:2015-03-13 09:53:37
【问题描述】:

我对 MVC 和 C# 还很陌生,我发现自己陷入了这个问题。

我有 3 个表:UserCredentials、BusinessCredentials 和 BusinessDetails。 我创建了 3 个 ViewModel:

UserBusinessListingViewModel

[Display(Name = "User Id:")]
public int User_Id { get; set; }

public IEnumerable<BusinessCredentialsViewModel> BusinessCredentialsViewModels {get; set;}

BusinessCredentialsViewModel

[Display(Name = "Business Id:")]
public int Id { get; set; }

[Display(Name = "Name:")]
public string Name { get; set; }

public IEnumerable<BusinessDetailsViewModel> BusinessDetailsViewModels { get; set; }

BusinessDetailsViewModel。

[Display(Name = "Id:")]
public int Id { get; set; }

[Display(Name = "Category:")]
public string Category { get; set; }

[Display(Name = "Rating:")]
public float Rating { get; set; }

[Display(Name = "Country:")]
public string Country { get; set; }

[Display(Name = "State:")]
public string State { get; set; }

[Display(Name = "City:")]
public string City { get; set; }

主视图模型是UserBusinessListingViewModel;它必须显示来自上述所有 3 个表格的信息。

在我拥有的控制器中

UserCredential businessSectionUserCredential = 
    _unitOfWork.UserCredentials
            .Include("BusinessCredentials")
            .Include("BusinessCredentials.BusinessDetails")
            .First(p => p.Id == WebSecurity.CurrentUserId);

var userBusinessListingViewModel = new UserBusinessListingViewModel();
userBusinessListingViewModel.User_Id = businessSectionUserCredential.Id;

我被困在这里了。

userBusinessListingViewModel.BusinessCredentialsViewModels

没有属性。我如何映射这个?

谢谢。

我想实现这样的目标。 以前做过,但这很容易,因为我只有一个视图模型:

var profileViewModel = new ProfileViewModel();

UserCredential userCredential = _unitOfWork.UserCredentials.Include(p => p.UserDetail).First(p => p.Id == WebSecurity.CurrentUserId);
UserDetail userDetail = userCredential.UserDetail;

profileViewModel.UserCredentials_Id = userCredential.Id;
profileViewModel.Email = userCredential.Email;
profileViewModel.FirstName = userDetail.FirstName;
profileViewModel.LastName = userDetail.LastName;
return PartialView("_ProfilePartial", profileViewModel);

我正在使用

@model BusinessListing.ViewModels.UserBusinessListingViewModel
<div class="col-md-8">
    <p class="p-custom-bg">@Model.User_Id</p>
</div>

显示这个。

【问题讨论】:

  • userBusinessListingViewModel.BusinessCredentialsViewModels 没有属性,因为它是一个 IEnumerable。您可以使用 `.Select(b=> b.Name) 访问每个项目
  • 类似userBusinessListingViewModel.BusinessCredentialsViewModels = businessSectionUserCredential.BusinessCredentials.Select(x =&gt; new BusinessCredentialsViewModel() { ID = x.ID, NAme = x.Name, etc });

标签: c# asp.net-mvc model-view-controller controller web-deployment


【解决方案1】:

您没有Add 或BusinessCredentialsViewModels 上的任何类似方法,因为它是IEnumerable。但是,您已经为它定义了一个 getter 和一个 setter,因此您可以执行以下操作:

userBusinessListingViewModel.BusinessCredentialsViewModels = array;

在不了解您的代码的情况下,我无法帮助您告诉您要编写的确切代码。但是如果说UserCredential 有一个属性BusinessCredientials 这是一个IEnumerable&lt;BusinessCredential&gt;,那么你可以这样做:

userBusinessListingViewModel.BusinessCredentialsViewModels
    = userCredential.BusinessCredentials.Select(
        x => new BusinessCredentialsViewModel
            {
                Id = x.Id,
                /* etc, etc */
            });

【讨论】:

  • 我想做这样的事情:'var profileViewModel = new ProfileViewModel(); UserCredential userCredential = _unitOfWork.UserCredentials.Include(p => p.UserDetail).First(p => p.Id == WebSecurity.CurrentUserId); UserDetail userDetail = userCredential.UserDetail; profileViewModel.UserCredentials_Id = userCredential.Id; profileViewModel.Email = userCredential.Email; profileViewModel.FirstName = userDetail.FirstName; return PartialView("_ProfilePartial", profileViewModel);'这很简单,因为我只有一个视图模型。
  • @DanielStoica 如果您有更多信息要发布,请在问题本身中这样做。
  • 视图未填充。更新了我在视图中使用的代码
【解决方案2】:

userBusinessListingViewModel.BusinessCredentialsViewModels 是一个 IEnumerable,因此您看不到属性。

创建一个 BusinessCredentialsViewModel 对象,然后为其属性赋值。为对象的所有属性分配值后,将其添加到 userBusinessListingViewModel.BusinessCredentialsViewModels。例如:

var businessCredentialsViewModel = new BusinessCredentialsViewModel();    
businessCredentialsViewModel.Name = "SomeName";    userBusinessListingViewModel.BusinessCredentialsViewModels.Add(businessCredentialsViewModel);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多