我需要从不同的查询中获取单独的数据,问题是,如果这样的代码可以执行吗?或者是否有任何其他解决方法或方法来做出其中一个感谢!
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@{
sqls = "select sum(Disc-Html.DisplayFor(modelItem => item.Price))as D
from table "
DB.Open();
DataSet ds = new DataSet();
ds = DB.getData(sqls);
int P =ds.Tables[0].Rows[0]["D"];
return P;
}
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
答案 0 :(得分:0)
最好从视图中分离登录问题并将其放在控制器中。 View看起来像一个模板,用于显示由控制器处理的数据,因此应该在整个项目中保持一致。从您的代码中看起来您需要检索2个数据库表数据,在这种情况下使用ViewModel加入2个类(我假设您有模型中的2个类和控制器将处理您需要获取的内容并将ViewModel返回到您的视图。尽管您需要将ViewModel强烈绑定到您的视图。
答案 1 :(得分:0)
任何代码都可以从视图中执行,但需要询问是否应该这样做。
我建议阅读更多关于MVC设计模式以及它应该实现的内容。简而言之,视图只是在其他应用程序层中处理的数据和业务逻辑的直观表示,然后由模型提供。
所以请在其他地方进行数据访问并将结果放在模型上。
答案 2 :(得分:0)
你也可以在视图中执行c#代码(你的代码是错误的,因为它说return P
在这里什么都不做),但是MVC的目的不是在代码中做这种类型的混合即可。
MVC遭遇打击的原因是因为关注的分离。如果我们遵循此规则,我们会有更大的灵活性,仅使用视图来显示数据,而不是在那里做任何逻辑内容,控制器是您必须编写逻辑的地方< /强>
我们可以将您的代码更改为遵循以下MVC模式。
就在您从控制器return View(model)
执行相同的foreach
循环之前,获取所需数据并将其分配给新属性。
foreach (var item in ModelList) // ModelList must be your List of model variable
{
sqls = "select sum(Disc)as D from table
where P = Html.DisplayFor(modelItem => item.Price)";
DB.Open();
DataSet ds = new DataSet();
ds = DB.getData(sqls);
int P =ds.Tables[0].Rows[0]["D"];
item.P = P; //assigning to a new property P
}
return View(ModelList);
现在,您在每个项目的属性中都有所需的值。您只需在视图中显示它们,如下所示。
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@item.P
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}