Asp.net mvc 4 如何使用MVC4将dropdownlist viewbag值发布到sql server?

Asp.net mvc 4 如何使用MVC4将dropdownlist viewbag值发布到sql server?,asp.net-mvc-4,Asp.net Mvc 4,我通过viewbag在dropdownlist中获取动态值,dropdownlist值显示正确,但我的问题是发布,我在sql server中插入dropdownlist值时遇到问题,请帮助我解决此问题 这是我的模型页面 public class RegisterModel { public Prefix Prefix { get; set; } } public class Prefix { public int? ID { get; set; } public string Na

我通过viewbag在dropdownlist中获取动态值,dropdownlist值显示正确,但我的问题是发布,我在sql server中插入dropdownlist值时遇到问题,请帮助我解决此问题

这是我的模型页面

public class RegisterModel
{
  public Prefix Prefix { get; set; }
}

public class Prefix
{
  public int? ID { get; set; }
  public string Name { get; set; }      
}
这是我的控制器页面

void BindPrefix()
{
  List<Prefix> lstPrefix = new List<Prefix>()
  {
    new Prefix { ID = null, Name = "Select" },
    new Prefix { ID = 1, Name = "Mr" },
    new Prefix { ID = 2, Name = "Ms" },
    new Prefix { ID = 1, Name = "Mrs" },
    new Prefix { ID = 2, Name = "Dr" }
  };
  ViewBag.Prefix = lstPrefix;
}

public ActionResult Register()
{
  BindPrefix();     
  return View();
}

[HttpPost]       
public ActionResult Register(FormCollection FC)
{
  string Prefix =FC[ViewBag.Prefix]; // here prefix get null value.
  return view();
}

如果试图获取选定值,则必须从下拉名称中获取,该名称将生成:

string Prefix =FC["Prefix"]; 
目前:

@Html.DropDownListFor(m => m.Prefix.ID, new SelectList(ViewBag.Prefix, "ID", "Name", ViewBag.pef))
将生成此html:

<select id="Prefix_ID" name="Prefix.ID">
.........
.........
</select>

基于您只想显示并发回“标题”的注释,使用类前缀似乎是不必要的

视图模型

public class RegisterViewModel
{
  [Required(ErrorMessage = "Please select a title")]
  public string Title { get; set }
  // other properties
  public SelectList TitleList { get; set; }
}
控制器

public ActionResult Register()
{
  RegisterViewModel model = new RegisterViewModel();
  ConfigureViewModel(model);
  return View(model);
}

[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
  if(!ModelState.IsValid)
  {
    ConfigureViewModel(model);
    return View(model);
  }
  // save and redirect
}

private void ConfigureViewModel(RegisterViewModel model)
{
  List<string> titles = new List<string>) { "Mr.", "Ms", "Mrs", "Dr." };
  model.TitleList = new SelectList(titles);
}

ViewBag信息按请求保存,这就是为什么在post操作中有ViewBag.Prefix等于null的原因。您的视图基于模型注册表模型,因此发回将正确绑定的模型公共ActionResult RegisterModel模型我使用了ActionResult,但我也显示null,因为Prefix是Boolean datatypePrefix不是typeof Boolean。它是一个包含int属性的复杂类型?ID和字符串名称,您应该将ViewBag属性更改为另一个名称,例如ViewBag.PrefixList=lstPrefix;删除第四个参数SelectList构造函数并删除第一个项目表单lstPrefix,改为使用@Html.DropDownListForm=>m.Prefix.ID,new SelectListViewBag.PrefixList,ID,Name,Select。为什么你的ID值不是唯一的?你有两个“1”和两个“2”-你怎么知道选择了什么?为什么您需要一个复杂的属性呢?只选择一个字符串Mr,Ms etcIt将生成一个字符串前缀=FC[Prefix.ID],这有什么错;谢谢你的回复,先生,如何在html中生成dropdownlist当我将我的dropdownlist保存在html中时,查看输出不在dropdownlist中显示值,如何在html标记中显示dropdownlist值。你说的没错,我得到了输出感谢每一个…我得到了基于id的输出,但我需要基于名称的输出,请帮帮我。你的意思是,你想把名字贴出来吗?我想不是。祝你在将来得到任何帮助。
public class RegisterViewModel
{
  [Required(ErrorMessage = "Please select a title")]
  public string Title { get; set }
  // other properties
  public SelectList TitleList { get; set; }
}
public ActionResult Register()
{
  RegisterViewModel model = new RegisterViewModel();
  ConfigureViewModel(model);
  return View(model);
}

[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
  if(!ModelState.IsValid)
  {
    ConfigureViewModel(model);
    return View(model);
  }
  // save and redirect
}

private void ConfigureViewModel(RegisterViewModel model)
{
  List<string> titles = new List<string>) { "Mr.", "Ms", "Mrs", "Dr." };
  model.TitleList = new SelectList(titles);
}
@model RegisterViewModel
...
@using (Html.BeginForm())
{
  @Html.LabelFor(m => m.Title)
  @Html.DropDownListFor(m => m.Title, Model.TitleList, "-Please select-")
  @Html.ValidationMessageFor(m => m.Title)
  ....
}