我是MVC的新手,所以请耐心等待......
我的新表单\ view工作(创建和添加客户端) 但是现在我想让用户如此指定新客户端来自A下拉列表的国家/地区。但我确定如何做到这一点?
视图模型
public class ClientNew
{
public string Company { get; set; }
public string Address { get; set; }
//New
public IEnumerable<CountryList> Country{ get; set; }
}
public class CountryList
{
public string Id { get; set; }
public string Name { get; set; }
}
控制器 (这可能是错误的,这是最好的方法吗?)
public ActionResult New()
{
var cl= new List<CountryList>();
cl.Add(new CountryList(){Id = "abcd",Name = "UK"});
cl.Add(new CountryList() { Id = "abce", Name = "USA" });
var model = new ViewModels.ClientNew();
model.Country= cl;
return View("New", model);
}
查看(不知道如何探测)
Html.DropDownList("Id" ??????)
答案 0 :(得分:1)
在您的视图中,您将设置属性ID的下拉列表。这将是POST到表单时在下拉列表中选择的当前值。将用于下拉列表的数据是名为“状态”的SelectList,它存在于您的模型中。
@Html.DropDownListFor(m => m.Id, Model.Countries)
您的视图模型将包含您的ID,名称和国家/地区属性以及您需要的任何其他属性。
public class ClientNewViewModel {
public string Id { get; set; }
public string Name { get; set; }
public SelectList Countries { get; set; }
}
在控制器中,您需要将模型传递给视图。您需要填充Countries SelectList。请记住,在POST和验证失败时,您需要填充此值。
public ActionResult New()
{
var model = new ClientNewViewModel();
model.Countries = new SelectList(service.GetCountries(),
"Id", "Name"); // set up what properties are used for id/name of dropdown
return View(model);
}
[HttpPost]
public ActionResult New(ClientNewViewModel model)
{
if( !ModelState.IsValid )
{
model.Countries = new SelectList(service.GetCountries(),
"Id", "Name");
return View(model);
}
// redirect on success
return RedirectToAction("Index");
}
答案 1 :(得分:0)
Html.DropDownList("Id",
Country.Select(x => new SelectListItem
{
Text = x.Name,
Value = x.Id
}));
答案 2 :(得分:0)
这里有关于如何做到这一点的好的博客文章 - &gt; http://277hz.co.uk/Blog/Show/10/drop-down-lists-in-mvc--asp-net