我有以下型号&在视图中简单下拉。我想在下拉列表中填写客户名称。我尝试了下面的代码但它没有用,任何人都可以对这段代码有什么不妥。
模型
public class customer
{
public int id { get; set; }
public string name { get; set; }
public string address { get; set; }
}
//////////////////////////
@{
Layout = null;
}
@model IEnumerable<MvcApplication1.customer>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));
</div>
答案 0 :(得分:2)
在您尝试这样做时,您犯了一些基本错误。首先尝试了解MVC中幕后的内容以及这些关键词的含义。
您已定义
@model IEnumerable<MvcApplication1.customer>
然后你有以下代码
@Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));
此处,您的m
表示您已初始化为IEnumerable<MvcApplication1.customer>
的@模型。您正在尝试访问IEnumerable(m => m.name
)中名为name的属性,而IEnumerable
没有此属性。如果您出于某种原因想要访问您的模型,则@model
应该是Customer对象。然后,您可以像@Html.DropDownListFor(m=>m.name, new SelectList(Model,"id","name"));
在评论中,您已经说过这段代码@Html.DropDownList("name", new SelectList(Model, "id", "name"));
运行正常。是的,它之所以有效,是因为您正在使用标识"name"
创建一个新的html select元素,并将Model
中的所有内容列为选择选项。
好的,足够的解释。
这是我建议您解决问题的解决方案。
在您的控制器操作中,按如下方式实现代码流。
var dropdownDataList = //select your data from the database or any place as a list;
var dropdownOptions = dropdownDataList.Select(d => new {
id = d.valueforid,
name = d.valueforname
});
ViewBag.DropdownListOptions = new SelectList(dropdownOptions, "id", "name");
return View();
现在在您看来,请执行以下操作。
@{
Layout = null;
}
@model MvcApplication1.customer
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@Html.DropDownListFor(m=>m.name, (SelectList)ViewBag.DropdownListOptions)
</div>
</body>
</html>
尝试在MSDN中阅读这些文章。 http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx
希望这会有所帮助。
干杯, Amila
答案 1 :(得分:2)
Stack Overflow上的这个问题上有很多样本。我之前已多次回答。
使用视图模型在视图上表示您的数据,不要将您的域对象传递给视图。视图模型具有视图所需的属性,在这种情况下,我只会使用下拉客户。
您的视图模型可能如下所示:
public class CustomerViewModel
{
public int CustomerId { get; set; }
public IEnumerable<Customer> Customers { get; set; }
}
您的客户类:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
你的控制器:
public class CustomerController : Controller
{
private readonly ICustomerRepository customerRepository;
public Customer(ICustomerRepository customerRepository)
{
this.customerRepository = customerRepository;
}
public ActionResult Create()
{
CustomerViewModel viewModel = new CustomerViewModel
{
Customers = customerRepository.GetAll()
};
return View(viewModel);
}
}
您的观点:
@model YourProject.ViewModels.Customers.CustomerViewModel
@Html.DropDownListFor(
x => x.CustomerId,
new SelectList(Model.Customers, "Id", "Name", Model.CustomerId),
"-- Select --"
)
@Html.ValidationMessageFor(x => x.CustomerId)
我希望这会有所帮助。
答案 2 :(得分:0)
试试这个 将您的模型更改为此类
public class customer
{
public int id { get; set; }
public string SelectedName { get; set; }
public IEnumerable<SelectListItem> Names { get; set; }
public string address { get; set; }
}
在控制器中
[HttpGet]
public ActionResult Customer()
{
var names=//collect names from database
var model = new Customer
{
Names = names.Select(m=> new SelectListItem
{
value = m.whatever value you want to get(probably Id)
text = m.name you want to display
})
};
return View(model);
}
并在视野中
@model MvcApplication1.customer
@Html.DropDownListFor(model => model.SelectedName, Model.Names)