在单个MVC视图中添加和编辑多个表中的数据

时间:2016-11-21 00:40:25

标签: c# asp.net asp.net-mvc

我想编辑和添加多个表中的数据。 我开始在这个解决方案中说: How do I display data from multiple tables in a single MVC view

我有3个模特:uzytkownik,rolaPowiazanie和rola。在“uzytkownik”和“rolaPowiazanie”之间是“rolaPowiazanie”和“rola” - “rolaId”之间的连接“idUzytkownik”。我想在表格中显示“uzytkownik”和“rola”的信息。

 <table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.nazwaRoli)
        </th>
(...)
@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.nazwaRoli)
    </td>
(...)

DisplayNameFor给出“nazwaRoli”,但DisplayFor(modelItem =&gt; item.nazwaRoli)给出“idRola”。当我想在idRola的视图项目中看到时,也有idRola。

我把它添加到控制器中:

    public ActionResult Index()
    {
        IEnumerable<UzytkownicyRola> model = null;
        List<UzytkownicyRola> verify = new List<UzytkownicyRola>();

        var connection = System.Configuration.ConfigurationManager.ConnectionStrings["AplikacjaContext"].ConnectionString;

        using (var cn = new SqlConnection(connection))
        {
            cn.Open();

            if (cn.State == ConnectionState.Open)
            {
                string query = "select  uzytkownik.idUzytkownik,uzytkownik.imie,uzytkownik.nazwisko,uzytkownik.pesel,uzytkownik.haslo,uzytkownik.email,rolaPowiazanie.idUzytkownik,rolaPowiazanie.idRola,rola.idRola,rola.nazwaRoli from uzytkownik inner join rolaPowiazanie on uzytkownik.idUzytkownik=rolaPowiazanie.idUzytkownik inner join rola on rolaPowiazanie.idRola=rola.idRola;";
                SqlCommand cmd = new SqlCommand(query, cn);
                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    verify.Add(new UzytkownicyRola { idUzytkownik = Convert.ToInt32(dr[0].ToString()), imie = dr[1].ToString(), nazwisko = dr[2].ToString(), pesel = dr[3].ToString(), haslo = dr[4].ToString(), email = dr[5].ToString(), idRolaPowiazanie = Convert.ToInt32(dr[6].ToString()), idRola = Convert.ToInt32(dr[7].ToString()), nazwaRoli = dr[8].ToString() });
                }
            }

            cn.Close();
            return View(verify);
        }
    }

在视图中,当我想要显示“nazwaRoli”时,我会得到“idRola”。我应该改变什么来改正节目“nazwaRoli”?

自动生成的编辑外观如下:

 public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        UzytkownicyRola uzytkownicyRola = db.UzytkownicyRolas.Find(id);
        if (uzytkownicyRola == null)
        {
            return HttpNotFound();
        }
        return View(uzytkownicyRola);
    }

- EDIT-- 我也遇到了编辑和细节方面的问题。

有一个错误:

  

System.Data.SqlClient.SqlException:无效的对象名称'dbo.UzytkownicyRolas'。

错误来源:

  

UzytkownicyRola uzytkownicyRola = db.UzytkownicyRolas.Find(id);

“UzytkownicyRolas”仅存在于AplikacjaContext(我之前创建的DbContext)中,并且位于DAL文件夹中。  如何将此更改为此方法有效?

AplikacjaContext'c代码:

public partial class AplikacjaContext : DbContext
{
    public AplikacjaContext()
        : base("name=AplikacjaContext")
    {
    }

    public virtual DbSet<rola> rola { get; set; }
    public virtual DbSet<rolaPowiazanie> rolaPowiazanie { get; set; }
    public virtual DbSet<uzytkownik> uzytkownik { get; set; }

    public System.Data.Entity.DbSet<Aplikacja.Models.UzytkownicyRola> UzytkownicyRolas { get; set; }
}

1 个答案:

答案 0 :(得分:0)

当我想要展示&#34; nazwaRoli&#34;我得到了#id; idRola&#34;。我应该更改什么来更正节目&#34; nazwaRoli&#34;?

序号:8上的dr(:SqlDataReader)将获得&#34; idRola&#34;在你的SQL中。

select  
uzytkownik.idUzytkownik,--0
uzytkownik.imie,--1
uzytkownik.nazwisko,--2
uzytkownik.pesel,--3
uzytkownik.haslo,--4
uzytkownik.email,--5
rolaPowiazanie.idUzytkownik,--6
rolaPowiazanie.idRola,--7
rola.idRola,--8
rola.nazwaRoli --9
...

在SqlDataReader上使用列名将更具可读性,就像这样...

nazwaRoli = dr["nazwaRoli"].ToString();

类型或命名空间名称&#39; UzytkownicyRola&#39;不存在

请检查您是否在课程上有正确的参考:&#34; UzytkownicyRola&#34;,错误不在&#34; UzytkownicyRola s &#34;