我是ASP.NET MVC的新手,并且/我不确定如何将我的问题转化为字面意思。我必须创建一个页面,用户可以在贷款申请中添加多个附属物品清单。每“行”为每个抵押品的项目需要几个下拉列表选择是基于一个ViewModel抵押品的类型,其类等页:DropDownListFor ViewModel中集合的属性
public class CollateralViewModel
{
public Guid LoanApplicationId { get; set; }
public IEnumerable<CollateralRowViewModel> Collateral { get; set; }
}
了IEnumerable抵押品得到如下:
public class CollateralRowViewModel
{
public Guid Id { get; set; }
public Guid LoanApplicationId { get; set; }
public IEnumerable<SelectListItem> CollateralClass { get; set; }
public IEnumerable<SelectListItem> CollateralType { get; set; }
public Guid SelectedCollateralType { get; set; }
public Guid SelectedCollateralClass { get; set; }
[DataType(DataType.MultilineText)]
public string Description { get; set; }
public decimal? MarketValue { get; set; }
public decimal? PriorLiens { get; set; }
public decimal? AdvanceRate { get; set; }
public string GrantorFirstName { get; set; }
public string GrantorMiddleName { get; set; }
public string GrantorLastName { get; set; }
}
我的控制器看起来是这样的:
public async Task<ActionResult> Create(CollateralViewModel collateralViewModel)
{
var collateralServiceProxy = base.ServiceProvider.CollateralServiceProxy;
var collateralTypes = await GetCollateralTypesByClass(Guid.NewGuid());
var selectedCollateral = collateralViewModel.Collateral.Select(collateral => new Collateral()
{
Id = collateral.Id,
LoanApplicationId = collateral.LoanApplicationId,
CollateralTypeId = collateral.SelectedCollateralType,
Description = collateral.Description,
GrantorFirstName = collateral.GrantorFirstName,
GrantorMiddleName = collateral.GrantorMiddleName,
GrantorLastName = collateral.GrantorLastName,
PriorLiens = collateral.PriorLiens,
MarketValue = collateral.MarketValue
});
foreach (var collateral in selectedCollateral)
{
await collateralServiceProxy.PutCollateralAsync(collateral);
}
return View(collateralViewModel);
}
private async Task<IEnumerable<SelectListItem>> GetCollateralClasses()
{
var collateralServiceProxy = base.ServiceProvider.CollateralServiceProxy;
var collateralClasses = await collateralServiceProxy.GetAllCollateralClassesAsync();
if (collateralClasses == null)
{
return new List<SelectListItem>();
}
return collateralClasses.ToSelectList();
}
private async Task<IEnumerable<SelectListItem>> GetCollateralTypesByClass(Guid collateralClassId)
{
var allCollateralTypes = await GetAllCollateralTypes();
var selectedCollateralTypes = allCollateralTypes.Where(collateralType => Guid.Parse(collateralType.Value).Equals(collateralClassId));
return selectedCollateralTypes;
}
当我尝试使用@ Html.DropDownListFor(型号=> model.Collateral.CollateralClasses)我不能因为CollateralClasses不可用。 I型“(model.Collateral。”和属性不存在。我在做什么错在这里?
任何帮助是极大的赞赏!
model.Collateral是IEnumerable。它就像一个集合。首先你不能像model.Collateral.CollateralClasses一样使用这个,必须有一些“FirstOrDefault”来从单个对象中选择属性。第二个也是最重要的问题是,您的CollateralClasses属性在哪里?我无法在模型中找到它 –
2014-09-12 13:15:58
CollateralClass属性在CollateralRowViewModel中作为IEnumerable CollateralClass。 –
BeeDev
2014-09-12 13:26:08
好吧,明白了。我正在用“CollateralClasses”搜索它。如果问题出现在@ Html.DropDownListFor(model => model.Collateral.CollateralClass)中,那么它将显示@ Html.DropDownListFor(model => model.Collateral.FirstOrDefault()。CollateralClasses)的建议。让我知道它是否有效 – 2014-09-12 13:27:21