通过ViewBag/ViewData将列表移动到视图,并在MVC 4中从中进行选择
本文关键字:并在 MVC 选择 行选 视图 ViewData ViewBag 列表 移动 通过 | 更新日期: 2023-09-27 18:10:57
我正在重构别人用ASP写得不好的应用程序。NET MVC 4(Razor(。.NET不是我的专长,我主要做C/C++。他没有按照MVC规范的方式进行数据库访问。他为每个表使用一个Repository类来在SQL Server上执行所有SQL命令,而不是让基本的实体框架来完成繁重的工作。应用程序必须:
-
从控制器中读取表中的行列表(他有一个表的Model(。
-
将此模型对象列表返回到视图(ViewBag或ViewData最简单(。
-
在"视图"中的表或列表中插入列表成员。
-
选择一行(表示列表中的(将所选行返回到控制器ActionResult-模型类中的单个表记录
public List<Note> GetNotesByWorkGroup(string workGroup)
{
List<Note> notes = new List<Note>;
string sql = "SELECT * FROM tblNotes where WorkGroup = 'Foo';
SqlCommand sqlCmd = new SqlCommand(sql, conn);
SqlDataReader myReader = sqlCmd.ExecuteReader();
if (myReader.HasRows)
{
while (myReader.Read())
{
Note note = new Note();
note.NoteId = myReader.GetInt32(NoteIdOrdinal);
note.DateTime = myReader.GetDateTime(DateTimeOrdinal);
note.WrittenBy = myReader.GetString(WrittenByOrdinal);
notes.Add(note);
}
}
return notes;
}
控制器收到此消息,必须将其传递给视图。他通过名单的方式是:
List<Note> notes = noteRepository.GetNotesByWorkGroup();
ViewData["myList"] = notes;
在看来,他把一切都搞砸了。最简单的解决方案是为每个必须可点击的元素(按钮或href?(创建一个带有onclick(note.Id(的表或列表。每一行都需要一个可点击的元素和Note对象中的另一个文本元素,才能显示两行。
例如,它需要看起来像这样,Date是可选字段,WrittenBy只是文本。
Date1 WrittenBy
Date2 WrittenBy
Date3 WrittenBy
然后,javascript函数可以接收Id onclick((并将其提交给控制器ActionResult((。
我只需要一个View代码示例(MVC 4、C#、Razor(,显示ViewData["myList"]是如何从C#取消引用到HTML并插入到列表或表中的行中的。此外,如何在传递parm的javascript函数中编写提交?
对视图有什么建议和示例吗?
您可以使用ViewModel、ViewBag或ViewData方法执行此任务。
ViewModel
foreach (var item in Model.myList)
{ }
ViewBag或ViewData
您可以创建一个表,然后可以遍历所有数据。
<table>
<tr>
<td>date</td>
<td>writtenby</td>
</tr>
@foreach (var item in ViewData["myList"])
{
<tr>
<td>@item.date</td>
<td>@item.writtenby</td>
</tr>
}
</table>
我的第一个建议是从控制器返回钞票,而不是设置View Data
如果不是,您应该能够像访问数组一样访问ViewData["myList"]。ViewData["myList"][0].properyName.
我希望这能有所帮助,如果我能找到一些示例代码,我会更新这篇文章。
@{
List<Note> _list = ViewData["myList"] as List<Note>;
}
@if (_list != null)
{
foreach (var item in _list)
{
@Html.ActionLink(item, "Index");
}
}
试试看,希望会有帮助。感谢