2016-06-07 44 views
0

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

@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

最好的方法是具有视图模型的任何C#代码,将具有所有必要的数据来填充视图,只传递该模型,以查看....(有这种方法的一些用法 - 你可以更新一个活的网站而不用重新设置它,如果是类或控制器会重置会话并重新启动网站) –

回答

0

最好从视图分离登录问题并将其放置在控制器中。查看的工作就像一个模板,用于显示控制器处理的数据,因此应该在整个项目中保持一致。从您的代码看来,您需要检索2个数据库表数据,在这种情况下,使用ViewModel来加入2个类(我假设你有模型中的2个类)和控制器将处理您需要获取并返回ViewModel到您的视图。请记住,虽然您需要将ViewModel强制绑定到您的视图。

+0

是的,2查询不同的数据库。我想我会去研究那个viewModel。 – JJBG

+0

好,你会发现很容易在ViewModel上显示你想要的数据。祝你好运! :-) –

0

任何代码都可以从视图中执行,但需要询问是否应该。

我建议阅读关于MVC设计模式的更多内容以及它应该实现的内容。简而言之,视图只是在其他应用程序层处理过的数据和业务逻辑的可视化表示,然后由模型提供。

因此,请在其他位置访问数据并将结果放在模型上。

+0

谢谢,多数民众赞成为什么即时通讯问是否有任何其他解决方法或代码 – JJBG

+0

这真的不是'解决方法'的问题,这是使用MVC架构,因为它应该使用的问题。由于您绕过了预期的结构,因此您上面所做的是“解决方法”。 – DvS

+0

在我的情况下,我没有看到任何其他方式来加载特定的列,也许会来自另一个模型或数据库。 – JJBG

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> 
     } 
+0

会试试这谢谢!至少它仍然保留MVC – JJBG

+0

你好,你的答案会为@ item.P产生相同的列值,其中每一行都有不同的光盘值。所以对我来说,真的需要执行另一个查询该列中的每一行只有 – JJBG

+0

@JJBG在控制器端我们正在执行不同的查询每个项目的权利?所以它必须有不同的价值。如果在控制器端 –

相关问题