我是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