对于mvc中的每个循环

时间:2011-06-23 05:46:16

标签: asp.net asp.net-mvc

我在我的视图中编写了以下代码,我必须在我的视图中打印我的forloop变量公司的变量值我该怎么做

 <table><tr>


        <td>
        <% 
        var ResDet1 = (from r in db.Res_Exp
                           where r.Resume.ResumeID == 191
                           select new{r.ResExpID,r.Company}).ToList();
        string company;
                                int exprinceid;
            if (ResDet1 != null)
            {

                foreach (var rc in ResDet1) 
                {

                    exprinceid = rc.ResExpID;
                    company = rc.Company; 

                }

            }
       %>
     </td></tr></table>

4 个答案:

答案 0 :(得分:4)

我相信以下代码

var ResDet1 = (from r in db.Res_Exp
                           where r.Resume.ResumeID == 191
                           select new{r.ResExpID,r.Company}).ToList();

属于存储库和

string company;
int exprinceid;

应该包含在您的模型中。只有foreach才会出现在视图中。在您的控制器中,您应该调用存储库的方法并将所有内容包装在视图模型中并将其传递给视图。在视图中,您应该只迭代和渲染值(在显示模式或编辑模式下)。请参阅this question了解如何在asp.net mvc中实现存储库模式

答案 1 :(得分:2)

答案 - 根据要求。

为什么要使用循环?利用MVC的模板。

创建名为MyModel的展示广告模板,其中MyModelResDet1类型的所有类型:

<强>共享\ DisplayTemplates \ MyModel.cshtml

<tr>
   <td><% Html.DisplayFor(model => model.ResExpID) %></td>
   <td><% Html.DisplayFor(model => model.Company) %></td>
</tr>

然后您的主视图就变成了这个:

<table>
   <% Html.DisplayForModel() %>
</table>

这是如何工作的?好吧,你的View应该是强类型的IEnumerable<ResDet>,正如@Muhammad所提到的那样,应该通过存储库获取。

你的行动应该是这样的:

[HttpGet]
public ActionResult Index()
{
   var results = _repository.ResDets();
   return View(results);
}

理想情况下,您应该使用Repository模式与模型进行通信,使用AutoMapper将模型展平为ViewModel,并使用接口驱动的依赖注入来处理依赖项(例如_repository)。

但是,如果这对你来说太过分了,至少将数据访问代码放在动作方法中,从不,我重复一遍,从不在视图中。

现在不是更好吗?

  1. Controller有两行代码 - 一行用于检索模型,另一行用于调用View。教科书的东西。

  2. 查看 dumb 。它展示了它所需要的东西,并专注于演示。

  3. 避免使用foreach循环,因为MVC将执行隐式foreach循环,因为它看到模型为IEnumerable<Something>,因此它查找匹配Something的模板,并查找您的自定义模板。

  4. 尽量不要忘记MVC的原理。如果您在View中混合代码和标记,那么您已经丢失了,并且可能在经典ASP中进行编码。

答案 2 :(得分:1)

通常你会做类似的事情:

<% foreach (var someVar in someCollection) 
   { %>
    <%: someVar %>
<% } %>

要循环打印。

答案 3 :(得分:1)

嗯,目前,你的foreach循环完全在你的视图引擎的代码块中运行。代码正在运行,并且这些变量被重新分配了很多次,但是你永远不会告诉C#编写任何HTML。我不是用ASPX写的,我是用Razor编写的,所以我不知道如何进出C#模式,但我认为它是这样的:

 <table>
        <% 
        var ResDet1 = (from r in db.Res_Exp
                           where r.Resume.ResumeID == 191
                           select new{r.ResExpID,r.Company}).ToList();
        string company;
        int exprinceid;
            if (ResDet1 != null)
            {
                foreach (var rc in ResDet1) 
                { %>
                <tr>
                    <td><% rc.ResExpID; %></td>
                    <td><% company = rc.Company; %></td>
                </tr>
               <% }

            }
       %>
</table>

编辑:具体来说,关键是您要保留代码以将HTML写入页面,然后返回以完成代码块。据我了解,MVC与两个渲染引擎中的这个原理一致。