从我的SelectListItem获取值,以便它可以进入数据库

时间:2015-12-04 18:29:32

标签: c# asp.net-mvc linq

我接近将我的内容投入到数据库中,但当我尝试将其放入数据库时​​,它无法让自己进入数据库。

在写这个错误时没有获得数据库值的问题。

  

无法转换类型&System; System.Collections.Generic.List`1 [System.Web.Mvc.SelectListItem]'输入' System.IConvertible'。

发布此处

[HttpPost]
    [AllowAnonymous]
    public ActionResult create(AccountViewModels userindhold)
    {
        DataLinqDB db = new DataLinqDB();
        if (!ModelState.IsValid)
        {
            var username = db.brugeres.FirstOrDefault(i => i.brugernavn == userindhold.Brugernavn);
            if (username == null)
            {
                brugere OpretUser = new brugere();
                OpretUser.kon = Convert.ToInt32(userindhold.Kon);//error her
                OpretUser.birthday = Convert.ToDateTime(userindhold.Birthday);//error her
                OpretUser.nyhedsbrevKategori_Id = Convert.ToInt32(userindhold.KategoriNyhedsbrev);//error her

                db.brugeres.InsertOnSubmit(OpretUser);

                db.SubmitChanges();

                return RedirectToAction("login");
            }
            else
            {
                ModelState.AddModelError("", "Denne e-mail er genkendelig.");
            }

        }
        return View();
    }

获取

[HttpGet]
    [AllowAnonymous]
    public ActionResult create()
    {
        DataLinqDB db = new DataLinqDB();

        AccountViewModels ac = new AccountViewModels();

        ViewBag.Kon = new SelectList(db.Kons, "id", "konvalue");
        ViewBag.KategoriNyhedsbrev = new SelectList(db.KategoriNyhedsbrevs, "id", "tekst");

        return View();
    }

在这里建模

[Display(Name = "Hvilken kategori kan du li til nyhedsbrevet?")]
    public IEnumerable<SelectListItem> KategoriNyhedsbrev
    {
        get; set;
    }

    [Display(Name = "Hvilke køn er du?")]
    public IEnumerable<SelectListItem> Kon
    {
        get; set;
    }

我这里有一个表单,还有更多的输入区域。

index.cshtml

<div class="form-group">
            <div class="col-xs-12">
                @Html.LabelFor(u => u.Kon)
                @Html.DropDownList("Kon", null, new
           {
               @class = "form-control",
           })
            </div>
        </div>

        <div class="form-group">
            <div class="col-xs-12">
                @Html.LabelFor(u => u.KategoriNyhedsbrev)
                @Html.DropDownList("KategoriNyhedsbrev", null, new
           {
               @class = "form-control",
           })
            </div>
        </div>

1 个答案:

答案 0 :(得分:0)

在您的AccountViewModel中,KonIEnumerable<SelectListItem>类型的属性,您尝试将其传递给Convert.ToInt32方法。 Convert.ToInt32通常需要数字数据的字符串版本(例如:"34"),以便可以安全地将其转换为整数版本(例如:34)。此方法无法将列表转换为整数值。

理想情况下,您应该在视图模型中添加属性以保存所选项目值

public class AccountViewModel
{
  public int SelectedKon {set;get;}
  public List<SelectListItem> Kon { get; set; }

  //Your other properties also goes here
}

在你的剃刀视图中,

@model AccountViewModel
@using(Html.BeginForm())
{
  @Html.DropDownListFor(s=>s.SelectedKon, Model.Kon,"Select one item")
  <input type="submit" />
}

现在,在您的HttpPost操作中,您可以使用已发布模型的SelectedKon属性值

[HttpPost]
public ActionResult Create(AccountViewModel model)
{
    if (ModelState.IsValid)
    {
      brugere OpretUser = new brugere();
      OpretUser.kon = model.SelectedKon;
      //Do other useful things and redirect to a Success page.
    }
    //TO DO : Reload the model.Kon collection again here.
    return View(model)
}

您应该为所有下拉菜单做同样的事情。