美好的一天!我是ASP.NET的新手,并尝试研究多个教程,非常感谢社区的反馈。
我正在尝试从另一个模型构建级联下拉列表。在课程中,我创建了一个CombinedModel
模型 - 视图
//Combined model
namespace WebApplication2.Models
{
public class CombinedModel
{
public RegisterViewModel RegisterViewModel { get; set; }
public DistrictModel Districtmodel { get; set; }
}
}
//Model 1
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string ConfirmPassword { get; set; }
public virtual List<DistrictModel> DistrictName { get; set; }
//Model 2
namespace WebApplication2.Models
{
public class DistrictModel
{
public int DistrictID { get; set; }
public string DistrictName { get; set; }
}
}
控制器-视图
public ActionResult Register()
{
ViewBag.DistrictNameList = new SelectList(db.DistrictModel, "DistrictName", "DistrictName");
return View();
}
查看
model WebApplication2.Models.CombinedModel
using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
<div class="col-md-10">
Html.DropDownListFor(m => m.RegisterViewModel.DistrictName, ViewBag.DistrictNameList, new { @class = "form-control" } )
</div>
它似乎不起作用......我尝试将其更改为Enum,但它仍然不符合。非常感谢您对此的反馈!
答案 0 :(得分:0)
您的问题没有关于任何级联下拉菜单的任何代码!但我发现您的代码存在问题,无法呈现下拉列表。
您需要将viewBag项目转换为SelectList
因为DropDownListFor
重载需要,而不是动态对象!
@using (Html.BeginForm("Index", "home", FormMethod.Post,
new { @class = "form-horizontal", role = "form" }))
{
@Html.DropDownListFor(m => m.RegisterViewModel.DistrictName,
ViewBag.DistrictNameList as SelectList, new { @class = "form-control" })
<input type="submit" />
}
答案 1 :(得分:0)
更改此行
public virtual List<DistrictModel> DistrictName { get; set; }
到此
public virtual string DistrictName { get; set; }
或强>
更改您的代码如下
<强>模型强>
public class RegisterViewModel
{
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string ConfirmPassword { get; set; }
public virtual string DistrictName { get; set; }
public virtual SelectList DistrictList { get; set; }
}
public class DistrictModel
{
public int DistrictID { get; set; }
public string DistrictName { get; set; }
}
public class CombinedModel
{
public RegisterViewModel RegisterViewModel { get; set; }
public DistrictModel Districtmodel { get; set; }
}
<强>控制器强>
CombinedModel obj = new CombinedModel();
obj.RegisterViewModel = new RegisterViewModel();;
obj.RegisterViewModel.DistrictList = new SelectList(db.DistrictModel, "DistrictName", "DistrictName");;
return View(obj);
查看强>
@using (Html.BeginForm("Index", "home", FormMethod.Post,
new { @class = "form-horizontal", role = "form" }))
{
@Html.DropDownListFor(model => model.RegisterViewModel.DistrictName, Model.RegisterViewModel.DistrictList, new { @class = "form-control" })
<input type="submit" />
}
答案 2 :(得分:0)
感谢所有的回复,我想发布最终的解决方法并与所有人分享。问题是我没有正确设置模型。我还必须在Get / Post中添加视图包并在视图中更改为dropdownlist。
<强> 模型 强>
public class AssetRequest
{
public int Id { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Request date")]
public DateTime AssetRequestDate { get; set; }
[Display(Name = "Facility")]
public int FacilityId { get; set; }
public virtual Facility Facility { get; set; }
public class Facility
{
public int Id { get; set; }
[Display(Name="Asset")]
public string AssetName { get; set; }
public virtual ICollection<AssetRequest> AssetRequests { get; set; }
}
public DbSet<AssetRequest> AssetRequestTable { get; set; }
public DbSet<Asset> AssetTable { get; set; }
public DbSet<District> DistrictTable { get; set; }
<强>控制器强>
// GET: AssetRequests/Create
public ActionResult Create()
{
ViewBag.RequestStatusId = "New request";
ViewBag.AssetRequestDate = DateTime.Now;
ViewBag.AssetId = new SelectList(db.AssetTable, "Id", "AssetName");
ViewBag.DistrictId = new SelectList(db.FacilitytTable, "Id", "DistrictName");
ViewBag.RequestTypeId = new SelectList(db.RequestTypeTable, "Id", "RequestTypeName");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create([Bind(Include = "Id,AssetRequestDate,FacilityId,AssetId,RequestTypeId, RequestStatusId")] AssetRequest assetRequest)
{
var currentUser = await manager.FindByIdAsync(User.Identity.GetUserId());
if (ModelState.IsValid)
{
assetRequest.User = currentUser;
assetRequest.AssetRequestDate = DateTime.Now;
assetRequest.RequestStatusId = 1;
db.AssetRequestTable.Add(assetRequest);
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
感谢所有回复!
答案 3 :(得分:0)
确定
区域模型
public class DistrictModel
{
public int Id { get; set; }
public string DistrictName { get; set; }
}
RegisterViewModel
public class RegisterViewModel
{
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
public string ConfirmPassword { get; set; }
//Mapping
public int DistrictId { get; set; }
public virtual List<DistrictModel> District { get; set; }
}
在控制器级别
public ActionResult Register()
{
List<DistrictModel> districtModelList = db.DistrictModel.ToList();
ViewData["DistrictNameList"] = districtModelList.Select(x => new SelectListItem { Value = x.Id , Text = x.DistrictName });
return View();
}
在视图
model RegisterViewModel
@using (Html.BeginForm("Index", "home", FormMethod.Post,
new { @class = "form-horizontal", role = "form" }))
{
@Html.DropDownListFor(model => model.DistrictId, (IEnumerable<SelectListItem>)ViewData["DistrictNameList"], "[Select District]", new { @class = "form-control" })
<input type="submit" />
}