是否可以在视图中直接执行此操作

时间:2016-06-07 06:56:00

标签: c# asp.net-mvc

我需要从不同的查询中获取单独的数据,问题是,如果这样的代码可以执行吗?或者是否有任何其他解决方法或方法来做出其中一个感谢!

@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>
}

3 个答案:

答案 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>
        }