我是MVC的初学者(但不是C#),但必须使用Entity Framework在Visual Studio .NET应用程序(MVC或WPF)中创建项目。我创建了一个Database First应用程序,但这是我的问题:
表中客户
我有Id,标题,名称,MiddleName,姓氏,地址,CountryId(与表国家的关系[Id,名称] 1对多),有效(位,真/假,复选框)
表中国家
Id,名称(预定义)
另一个表标题(我做的,因为我无法对下拉列表进行硬编码)
Id,TitleName
我的问题是当我创建Controller + View时,标题显示为TextBox(又名@ Html.Editor(...)),当我将其更改为@Html.DropDownList("nameHere", null, new { htmlAttributes = new { @class = "form-control" } })
时
然后在我的GET中创建一个下拉视图列表:
public ActionResult Create()
{
ViewBag.nameHere = new SelectList(db.Titles, "Id", "TitleName");
ViewBag.CountryId = new SelectList(db.Countries, "Id", "Name");
return View();
}
然后在我的POST中我也把它放了:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Title,Name,MiddleName,Surname,Address,CountryId,Active")] Customer customer)
{
if (ModelState.IsValid)
{
db.Customers.Add(customer);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.nameHere = new SelectList(db.Titles, "Id", "TitleName", db.Title); //selects from table Titles the Id and TitleName for the field Title in Customers table? at least that's how I interpretate it
ViewBag.CountryId = new SelectList(db.Countries, "Id", "Name", customer.CountryId); //same for Country
return View(customer);
}
但我有3个问题:
第一个 - 服务器返回db.Customers中的Title为NULL值
第二个 - 如果我不使用下拉菜单,它将从TextBox字段发送值(但人们可以写任何他们想要的内容)
第三个(使用ViewBag和ViewData时) - 没有类型' IEnumerable'的ViewData项目。有关键" nameHere"
我只想要一个简单的下拉列表,其中有4个选项 - Ms,Mrs,Mr,Miss,当我选择它并将完整表单发送到服务器(Name,MiddleName,Surname等)时,在表Customers中从下拉列表中保存字符串。仅此而已。
我使用Database First创建了我的数据库(也就是创建db然后是Model,而不是创建数据库)
答案 0 :(得分:0)
我设法用一些OOP得出答案:
Inside the controller(GET method):
List<string> ListItems = new List<string>();
ListItems.Add("Ms.");
ListItems.Add("Mrs.");
ListItems.Add("Mr.");
ListItems.Add("Miss");
SelectList Titles = new SelectList(ListItems);
ViewData["Titles"] = Titles;
在视图内:
<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Title", ViewData["Titles"] as SelectList, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>
</div>