使用viewmodel并将查询传递到同一视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用viewmodel并将查询传递到同一视图相关的知识,希望对你有一定的参考价值。

我是mvc架构的新手。我想创建一个带有表单的视图,用于将数据存储到db和一个部门,以使用查询显示详细信息。此视图使用viewmodel- Add_session_ViewModel。

问题是如果我包含viewmodel来查看显示部分中有错误,如果我包含列表,则表单中存在错误。代码如下:

控制器:

public ActionResult Add_session()
    {





        //display data


        var query =( from a in db.Session_details_feedback
                    join b in db.Employee_Details_Feedback on a.Trainer_id equals b.Emp_id
                    select new
                    {

                        a.Session_date,
                        a.Session_name,
                        b.Emp_name
                    } ).ToList();
        foreach (var item in query)
        {
          List<Add_session_ViewModel> sessionList = new List<Add_session_ViewModel>
            {
              new Add_session_ViewModel { Session_name=item.Session_name,Session_date=item.Session_date,emp_name=item.Emp_name}


          };
            ViewData.Model = sessionList;



        return View(ViewData.Model);
    }

视图模型:

public class Add_session_ViewModel : DbContext

{
    public string Session_name { get; set; }
    public int Trainer_id { get; set; }
    public System.DateTime Session_date { get; set; }
     public string emp_name { get; set; }
    public IList<Add_session_ViewModel> Session_List { get; set; }


}

视图:

@using (html.BeginForm("Add_session", "Home", FormMethod.Post, new { @class = "form-horizontal" }))
            {

                <div class="form-group">


                    @Html.TextBoxFor(x => x.Session_name, new { @class = "form-control", placeholder = " Enter Session name" })


                </div>
                <div class="form-group">


                    @Html.TextBoxFor(x => x.Session_date, new { @class = "form-control", placeholder = " Enter Session date" })


                </div>
                <div class="form-group">

                    @Html.DropDownListFor(x => x.Trainer_id, ViewBag.TrainerList as IEnumerable<SelectListItem>, "Select Trainer")

                </div>

                <div class="form-group">
                    <input id="add" type="submit" value="ADD" />
                </div>
            }
        </div>
    </div>

</center>
<div class="table-responsive">
    <table class="table">
        <thead>
            <tr>

                <th>Date</th>
                <th>Session</th>
                <th>Trainer</th>

            </tr>
        </thead>

        @foreach (var item in Model)
        {

            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Session_date)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Session_name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.emp_name)
                </td>

            </tr>

        }
    </table>

我一直在寻找一个解决方案,仍然没有得到任何。如果有人能给我一个解决方案,那将是值得赞赏的。

谢谢。

我的viewmodel是:

public class Add_session_ViewModel 

{
    public string Session_name { get; set; }
    public int Trainer_id { get; set; }
    public System.DateTime Session_date { get; set; }
     public string emp_name { get; set; }
}

the view use all these properties  through a form.

At the same time I need to get the data using the below query and get it displayed on the same view:

 var query =( from a in db.Session_details_feedback
                        join b in db.Employee_Details_Feedback on a.Trainer_id equals b.Emp_id
                        select new
                        {

                            a.Session_date,
                            a.Session_name,
                            b.Emp_name
                        } ).ToList();

我没有想法如何同时将查询和视图模型绑定到视图

答案

首先,

DbContext作为基类删除到您的视图模型,

public class Add_session_ViewModel
{
    public string Session_name { get; set; }
    public int Trainer_id { get; set; }
    public System.DateTime Session_date { get; set; }
    public string emp_name { get; set; }
    public IList<Add_session_ViewModel> Session_List { get; set; }
}

然后尝试将LINQ查询结果映射到视图模型的直接列表。

public ActionResult Add_session()
{
    Add_session_ViewModel model = new Add_session_ViewModel(); 

    var result =(from a in db.Session_details_feedback
                join b in db.Employee_Details_Feedback on a.Trainer_id equals b.Emp_id
                select new Add_session_ViewModel   //<= Note here
                {
                     Session_date = a.Session_date,
                     Session_name = a.Session_name,
                     emp_name = b.Emp_name
                }).ToList(); 

    model.Session_List = result;      

    return View(model);    //<= Return model to view instead of "ViewData"
}

然后你的视图必须有一个视图模型

@model FeedBack_Form.Models.Add_session_ViewModel

并将你的foreach循环更改为

@foreach (var item in Model.Session_List)

以上是关于使用viewmodel并将查询传递到同一视图的主要内容,如果未能解决你的问题,请参考以下文章

MVVM 并将可选值传递给 viewModel

将一个模型从局部视图传递到父视图,并将另一个模型绑定到同一个父视图

无法通过命令将值从视图传递到viewmodel

在 codeigniter 中,如何将数组值从控制器传递到同一视图页面?

iOS:如何使用 MVVM 将模型从视图模型传递到视图模型?

如何检索用户名和姓并将其映射到 ViewModel