0

我正在尝试使用创建操作方法填充我的数据库。我表单上的两个字段是下拉菜单。下拉列表链接到两个单独的子表,这些子表最终将通过 create 方法发布在我的主父表上。我很难让这些下拉列表填充正确的数据。

我的模型:

public class County
{

[Key]
public string CountyName { get; set; }
}


public class Contact
{
[Key]
public int ContactId { get; set; }
public string ContactName { get; set; }


 public class InspectionInfo
{
    [Key]
    public int InspectionId { get; set; }



    //[Required]
    public Contact Contact { get; set; }


    //[Required]

    public County County { get; set; }

我的控制器:

 //
    // GET: /Inspection1/Create
    public ActionResult Create()
    {


        var model = new InspectionInfo
        {

            Submitted = DateTime.Now,
            //Contact = new Contact()
        };


        ViewBag.CountyName = new SelectList(db.Counties,"CountyName", "CountyName");
       ViewBag.Contactname = new SelectList(db.Contacts, "ContactName", "ContactName");     

        return View(model);
    }

    //
    // POST: /Inspection1/Create

    [HttpPost]
    public ActionResult Create(InspectionInfo inspectioninfo)
    {
            if (ModelState.IsValid)
        {
            db.InspectionInfos.Add(inspectioninfo);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(inspectioninfo);
    }

我的观点:

 @using (Html.BeginForm()) {
 @Html.ValidationSummary(true)
 <fieldset>
 <div class="editor-label">


        @Html.LabelFor(model => model.County )
    </div>

    <div class="editor-field">
        @Html.DropDownListFor(m=>m.County.CountyName,(IEnumerable<SelectListItem>)ViewBag.CountyName)
        @Html.ValidationMessageFor(model => model.County)
    </div>



    <div class="editor-label">
        @Html.LabelFor(model => model.Contact)
    </div>
    <div class="editor-field">

 @Html.DropDownListFor(m=>m.Contact.ContactName,  (IEnumerable<SelectListItem>)ViewBag.ContactName)
        @Html.ValidationMessageFor(model => model.Contact)
    </div>

目前,在休息期间检查字段值时,我继续收到 ContactName 的“1”。

此外,我收到 CountyName 的例外情况:

{"违反 PRIMARY KEY 约束 'PK_dbo.Counties'。无法在对象 'dbo.Counties' 中插入重复键。\r\n语句已终止。"}

任何帮助在这里将不胜感激。

4

1 回答 1

1

那么有两个问题。正如你所说,你的下拉人口可能是错误的。当您说DropDownListFor时,它要求您作为模型属性的第一个参数,在您的情况下,它只是您的County. 其次,我不确定是否IEnumerable<SelectListItem>)ViewBag.CountyName有效,请尝试(SelectList)ViewBag.CountyName. 并且,如果可能,请将您的id用作 ValueMembers,除非您真的是您使用的唯一值。

其次,当您存储数据时,您需要附加两个实体CountyContact否则上下文会认为这些是您的实体并尝试添加它们,这会导致 PRIMARY KEY Violation。


因此,让我们修改您的代码,如下所示:

控制器:

// Use the entity id here...
ViewBag.CountyName = new SelectList(db.Counties,"CountyId", "CountyName");

页:

@Html.DropDownListFor(m=>m.County.CountyName,(SelectList)ViewBag.CountyName)

在您的控制器上:

[HttpPost]
    public ActionResult Create(InspectionInfo inspectioninfo)
    {
            if (ModelState.IsValid)
        {
            db.InspectionInfos.Add(inspectioninfo);
            db.Contact.Attach(inspectioninfo.Contact);
            db.County.Attach(inspectioninfo.County);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(inspectioninfo);
    }

玩一下这个,它应该可以工作。

于 2012-10-26T21:09:47.497 回答