Rim*_*tak 2 c# sql asp.net-mvc razor asp.net-mvc-4
我正在使用带有 Razor 的 MVC 4 Visual Studio 2012。
我正在生成一个基于从远程调用 SQL 服务器拉入数据集的几个表的表。
我希望能够将这些表格输出到网页上,然后在它们旁边创建两列复选框,以便将它们分配到一个或另一个区域(它本质上将数据分为接受和不接受,同时允许一些继续挂起,如果尚未作出决定)。
我目前将数据集中的所有表分配给控制器中的数据表,然后导出到剃刀页面。到目前为止,我还没有为此设置模型,如果我这样做了,我不确定我需要什么。
这是我目前的观点:
@{
ViewBag.Title = "Requisitions";
}
<table class="table">
<thead>
<tr>
@foreach (System.Data.DataColumn col in Model.Columns)
{
<th class ="td">@col.Caption</th>
}
</tr>
</thead>
<tbody>
@foreach(System.Data.DataRow row in Model.Rows)
{
<tr>
@foreach (var cell in row.ItemArray)
{
<td class="td">@cell.ToString()</td>
}
</tr>
}
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
这是我当前的控制器:
DataTable R = new DataTable();
public void GetData()
{
string connString = "Data Source=.;database=dataBase;Integrated Security=SSPI";
DataSet dataset = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter("dbo.procApprovalSelectPending", connString);
using (adapter)
{
adapter.SelectCommand.CommandType = CommandType.StoredProcedure;
adapter.Fill(dataset);
}
int count = dataset.Tables.Count;
for (int i = 0; i < dataset.Tables.Count; i++)
{
// Do something for each recordset (11 recordsets)
if (i == 0)
{
R = dataset.Tables[i];
}
}
dataset.Dispose();
adapter.Dispose();
}
public ActionResult Rs()
{
GetData();
return View(R);
}
Run Code Online (Sandbox Code Playgroud)
我有比显示的更多的数据表,但它们被删除以节省空间。
总而言之,我想要两个复选框列,它们与从数据表创建的每一行对齐,允许我选择那部分数据以将已更改的内容发送回服务器,并创建一个动态复选框对于每一行都给了我一个错误,例如:
@foreach(System.Data.DataRow row in Model.Rows)
{
<tr>
@foreach (var cell in row.ItemArray)
{
<td class="td">@cell.ToString()</td>
}
<td class="td">@Html.CheckBoxFor(m => m.Checkbox)</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
“表达式树可能不包含动态操作”
提前致谢!
小智 5
您应该创建一个视图模型来表示您想要显示的属性,包括 2 个附加的布尔属性,用于“接受”和“不接受”。假设您的列是 ID 和 Name
public class MyModel
{
public int ID { get; set; }
public string Name { get; set; }
public bool Accepted { get; set; }
public bool NotAccepted { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并根据要显示的表中的每一行创建一个集合
public ActionResult Rs()
{
List<MyModel> items = new List<MyModel>();
// Populate items from your datatable
return View(items);
}
Run Code Online (Sandbox Code Playgroud)
那么在你看来
@model List<MyModel>
@using (Html.BeginForm()
{
<table>
@for (int i = 0; i < Model.Count; i++)
{
<tr>
<td>@Html.TextBoxFor(m => m[i].ID)</tr>
<td>@Html.TextBoxFor(m => m[i].Name)</tr>
<td>@Html.CheckBoxFor(m => m[i].Accepted)</tr>
<td>@Html.CheckBoxFor(m => m[i].NotAccepted)</tr>
</tr>
}
</table>
<input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)
然后在你的 post 方法中
[HttpPost]
public ActionResult Rs(List<MyModel> model)
{
foreach(MyModel item in model)
{
if(item.Accepted) {.. // do something
else if (item.NotAccepted) { .. // do something else
else {.. // do another thing
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20461 次 |
| 最近记录: |