如何使用Entity框架在MVC中的多个表中的单个视图中显示数据

时间:2017-06-05 23:03:43

标签: asp.net-mvc entity-framework

我想在用户视图中显示密码和用户名 任何人都可以帮助我吗?我创建了一个UserLogIn表,如下所示。如何在Razor视图中显示UserLogIn表格中的属性。

模型

public class User
{          
    [Key]
    public int UserID { get; set; }
    public string Name { get; set; }
    public string Mobile { get; set; }
    public string JobTittle { get; set; }
    public string Email { get; set; }    
}

public class LogIn 
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int LoginID { get; set; }
    [Required(ErrorMessage = "Required.")]
    public string UserName { get; set; }
    public string Password { get; set; }

    public  User User { get; set; }
}

控制器

public class UsersController : Controller
{
    private CodingContext db = new CodingContext();

    // GET: Users
    public ActionResult Index()
    {
        return View();
    }
}

查看

@model Coding.Models.User

@{
    ViewBag.Title = "Create";
}

<h2>Sign Up</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">

        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

2 个答案:

答案 0 :(得分:0)

执行此操作的正确方法是创建包含UserLogIn对象的视图模型。但快速而肮脏的方法是使用ViewBag s。

public class UsersController : Controller
{
    private CodingContext db = new CodingContext();

    // GET: Users
    public ActionResult Create()
    {
        ViewBag.User = db.Users.FirstOrDefault(x => x.UserID == someId);
        ViewBag.LogIn = db.LogIns.FirstOrDefault(x => x.LoginID == someId);

        return View();
    }
}

然后,您可以在视图中使用这些ViewBag

<div>
    ViewBag.User.UserID
    ViewBag.LogIn.LoginID
</div>

我建议你永远不要以明文形式存储密码。它们应该被盐渍和散列,并且永远不会显示出来。另外,我不知道你为什么要创建自己的LogIn表。您应该查看Microsoft身份。

答案 1 :(得分:0)

ViewModel可以包含来自不同数据模型或数据源的多个实体或对象。

有用的链接:https://www.codeproject.com/Articles/826417/Advantages-of-ViewModel-in-MVC-Model-View-Controll

ViewModel的示例:根据您的要求

public class userloginviewmodel
{
     public user users{get;set;}
     public login logins{get;set;}
}

控制器代码:

public ActionResult Create()
    {
       userloginviewmodel OBJuserloginviewmodel = new userloginviewmodel();
        OBJuserloginviewmodel .Users = db.Users.FirstOrDefault(x => x.UserID == someId);
        OBJuserloginviewmodel .logins = db.LogIns.FirstOrDefault(x => x.LoginID == someId);

        return View(OBJuserloginviewmodel );
    }

<强> viewCode:

    @model Coding.Models.userloginviewmodel

    @{
        ViewBag.Title = "Create";
    }

    <h2>Sign Up</h2>


    @using (Html.BeginForm()) 
    {
        @Html.AntiForgeryToken()

        <div class="form-horizontal">

            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.user.name, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.user.name, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.user.name, "", new { @class = "text-danger" })
                </div>
            </div>


<div class="form-group">
            @Html.LabelFor(model => model.Login.LoginId, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Login.LoginId, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Login.LoginId, "", new { @class = "text-danger" })
            </div>
        </div>


        </div>
    }

    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
    }

附加说明:通过使用viewmodel,我们可以实现我们想要的大部分功能,即使在此,如果您需要用户列表和登录,您可以在同一个视图模型中再添加两个属性,得到结果。

希望以上内容有用

由于

KARTHIK