2015-09-30 36 views
-1

我有一个代码写在asp.net web窗体中有很多中继器Databind,我试图用Repository模式将它重写到MVC 5 EF 6。我知道我不能使用MVC中的中继器,但我怎么能改写MVCasp.net Repeater Databind代码在MVC5后面

私人无效组列表(中继器RPT,INT DTID,INT组ID,串conNumber,串CONNAME)下面的代码 { 尝试 {

  var list = data.List<CtItem>.Where(c.CNumber == conNumber && c.Name == conName) 

         .OrderBy(o => o.CNumber) 


      rpt.DataSource = list; 
      rpt.DataBind(); 
     } 
+0

将'list'添加到您的模型并在视图中使用它来构建输出。你*可能*想从ASP.NET MVC的一些入门教程开始。这样做时,*完全忘记了您对WebForms所了解的一切。技能组不会结转。如果您尝试以“WebForms方式编写MVC项目”,那么您将最终得到*糟糕的*代码,以及*您在网上找到的任何框架都将看起来很熟悉或很有帮助。 – David

回答

1

如果您的list变量将包含您需要的数据,那么您可能想要在控制器中获取该数据。然后你会添加到你的模型。它可能是这个样子:

public ActionResult SomeAction() 
{ 
    var list = data.List<CtItem> 
        .Where(c.CNumber == conNumber && c.Name == conName) 
        .OrderBy(o => o.CNumber); 
    return View(list); 
} 

在这种情况下,list数据类型将为您的视图模型。如果还有其他数据需要转到视图,那么它可能只是一个自定义视图模型的属性。例如:

public ActionResult SomeAction() 
{ 
    var list = data.List<CtItem> 
        .Where(c.CNumber == conNumber && c.Name == conName) 
        .OrderBy(o => o.CNumber); 
    var viewModel = new SomeViewModel(); 
    viewModel.SomeProperty = list; 
    // set other values on the view model 
    return View(viewModel); 
} 

然后在您的视图中,您将根据模型上的值构建标记。据推测你的网格产生了某种类型的<table>。所以构建输出可能看起来像这样:

<table> 
    <tr> 
    <th>Column Heading</th> 
    </tr> 
    @foreach (var item in Model.SomeProperty) 
    { 
    <th> 
     <td>@item.SomeColumnValue</td> 
    </th> 
    } 
</table> 

当然,这只有一列。无论你的结构是什么,你都可以扩展。您也可以从元数据等中获得列标题。有许多复杂性,您可以使用可以添加。但总的来说,你想要做的就是从数据源获取数据,将其发送到视图,并将其显示在视图中。