MVC组合框以及如何将其保存在数据库中?

时间:2016-12-14 17:02:42

标签: c# mysql asp.net-mvc database entity-framework

我是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,而不是创建数据库)

1 个答案:

答案 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>