查看模型结果的下拉列表
Dropdown List from View Model Result
我有一个 'ViewModel' 的工作示例,我认为它适用于下拉列表。目前我正在使用它来做一个 Foreach 并且它工作正常但我需要在我的表单下拉列表中得到相同的结果。我尝试过我认为可能可行的不同想法。 None 似乎可以解决问题。我没有示例,因为我通常只是阅读了一堆帖子,然后开始编写代码以查看有什么用。我仍在学习,所以希望有人能为我指明正确的方向,或者向我展示一些可以满足我需要的代码。我相信我的 ViewModel 中拥有我需要的一切,我想远离 Viewbag。下面是我的'ViewModel'。
这是我想用来填充下拉列表的行,除非有更好的方法。
result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);
编辑 - 这是 'ViewModel'
的当前工作下拉列表
@Html.DropDownList("AddressId", new SelectList(Model.Addresses, "AddressId", "LocationName"), "Select Address user belongs to", new { @class = "form-control" })
这里是全文'ViewModel'
public class RegisterUserViewModel
{
public static RegisterUserViewModel GetCompanyId(string userId, CustomerEntities db)
{
var qCust = from ad in db.Addresses
join anu in db.Users on ad.AddressId equals anu.AddressId
join cus in db.CompanyNames on ad.CompanyId equals cus.CompanyId
where (anu.Id == userId)
select new RegisterUserViewModel()
{
UserId = userId,
CompanyId = cus.CompanyId,
AddressId = ad.AddressId
};
var result = qCust.SingleOrDefault();
if (result != null)
{
result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);
};
return result;
}
[Required]
[Display(Name = "User Name")]
public string UserName { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "User Address")]
public int AddressId { get; set; }
[Required]
[Display(Name = "User Roles")]
public string UserRoles { get; set; }
public string UserId { get; set; }
public int CompanyId { get; set; }
public virtual IEnumerable<Addresses> Addresses { get; set; }
}
我希望将 AddressId 作为值,将 LocationName 作为文本。
尝试如下。
@Html.DropDownList("address", new SelectList(Model.Addresses, "AddressId", "LocationName"))
正如您在评论中提到的,在使用 @Html.DropDownList(model => model.AddressId...
后,您将获得第二项作为 selected 值,所以这里发生的是它会自动设置 selected来自 model.AddressId
的价值。只需检查一下。
现在,如果您想设置默认值,请确保您的 model.AddressId
值与默认值 select 相同。
我有一个 'ViewModel' 的工作示例,我认为它适用于下拉列表。目前我正在使用它来做一个 Foreach 并且它工作正常但我需要在我的表单下拉列表中得到相同的结果。我尝试过我认为可能可行的不同想法。 None 似乎可以解决问题。我没有示例,因为我通常只是阅读了一堆帖子,然后开始编写代码以查看有什么用。我仍在学习,所以希望有人能为我指明正确的方向,或者向我展示一些可以满足我需要的代码。我相信我的 ViewModel 中拥有我需要的一切,我想远离 Viewbag。下面是我的'ViewModel'。
这是我想用来填充下拉列表的行,除非有更好的方法。
result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);
编辑 - 这是 'ViewModel'
的当前工作下拉列表@Html.DropDownList("AddressId", new SelectList(Model.Addresses, "AddressId", "LocationName"), "Select Address user belongs to", new { @class = "form-control" })
这里是全文'ViewModel'
public class RegisterUserViewModel
{
public static RegisterUserViewModel GetCompanyId(string userId, CustomerEntities db)
{
var qCust = from ad in db.Addresses
join anu in db.Users on ad.AddressId equals anu.AddressId
join cus in db.CompanyNames on ad.CompanyId equals cus.CompanyId
where (anu.Id == userId)
select new RegisterUserViewModel()
{
UserId = userId,
CompanyId = cus.CompanyId,
AddressId = ad.AddressId
};
var result = qCust.SingleOrDefault();
if (result != null)
{
result.Addresses = db.Addresses.Where(a => a.CompanyId == result.CompanyId);
};
return result;
}
[Required]
[Display(Name = "User Name")]
public string UserName { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
[Required]
[Display(Name = "User Address")]
public int AddressId { get; set; }
[Required]
[Display(Name = "User Roles")]
public string UserRoles { get; set; }
public string UserId { get; set; }
public int CompanyId { get; set; }
public virtual IEnumerable<Addresses> Addresses { get; set; }
}
我希望将 AddressId 作为值,将 LocationName 作为文本。
尝试如下。
@Html.DropDownList("address", new SelectList(Model.Addresses, "AddressId", "LocationName"))
正如您在评论中提到的,在使用 @Html.DropDownList(model => model.AddressId...
后,您将获得第二项作为 selected 值,所以这里发生的是它会自动设置 selected来自 model.AddressId
的价值。只需检查一下。
现在,如果您想设置默认值,请确保您的 model.AddressId
值与默认值 select 相同。