使用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并将查询传递到同一视图的主要内容,如果未能解决你的问题,请参考以下文章
将一个模型从局部视图传递到父视图,并将另一个模型绑定到同一个父视图
在 codeigniter 中,如何将数组值从控制器传递到同一视图页面?