加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 如何将自定义linq查询传递给视图

发布时间:2020-12-16 06:49:42 所属栏目:asp.Net 来源:网络整理
导读:我正在学习和测试如何传递自定义 linq结果 控制器的代码: public ActionResult Index(){ const int pageSize = 5; return View(from p in db.powners where p.petowner.StartsWith("") orderby p.petowner.Skip(0).Take(pageSize).ToList() select new { p.
我正在学习和测试如何传递自定义 linq结果

控制器的代码:

public ActionResult Index()
{
    const int pageSize = 5;
    return View(from p in db.powners
                  where p.petowner.StartsWith("")
                  orderby p.petowner.Skip(0).Take(pageSize).ToList()
                  select new { p.ownerid,p.petowner,p.ostreet });

}

来自视图的代码:

@model System.Collections.Generic.IEnumerable<Mvc4test2.Models.powner>


@{
    ViewBag.Title = "Index";
}
<link href="../../Content/PagedList.css" rel="stylesheet" type="text/css" />
<h2>Find owner</h2>

<p>
@using (@Html.BeginForm("index","lookup",FormMethod.Get))
{    
    <b>Search</b>@Html.TextBox("search")<input type="submit" value="search" />
}
</p>
<table id="ownertable">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.petowner)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ostreet)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model)
{
    <tr>
    <td>
        <a href="">  @Html.DisplayFor(modelItem => item.ownerid) </a>
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.petowner)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.ostreet)
    </td>

</tr>
}

</table>

我尝试过的:

@model IEnumerable<Mvc4test2.Models.powner>

@model System.Collections.Generic.IEnumerable<Mvc4test2.Models.powner>

获取以下错误:

传递到词典中的模型项的类型为“System.Data.Objects.ObjectQuery1并[d> f__AnonymousType43 [System.Int32,System.String,System.String]]”,但是这需要字典类型的模型项’ System.Collections.Generic.IEnumerable1 [Mvc4test2.Models.powner]”.`

任何想法如何传递此查询以查看并使其按预期工作.
当然稍后我将在Skip(0)中使用变量.我必须先学会传递它.
谢谢

解决方法

不要传递匿名类型.在这里,我建议你有两个选择.如果Powner类只有3个字段(ownerid,petowner,ostreet),那么在查询中选择新的{p.ownerid,p.ostreet}行是多余的.

public ActionResult Index()
{
     const int pageSize = 5;
     var model = (from p in db.powners
                 where p.petowner.StartsWith("")
                 orderby p.petowner.Skip(0).Take(pageSize) select p).ToList();
     return View(model);
}

或者如果您的Powner类更复杂,并且您的视图必须仅显示ownerid,petowner和ostreet,则应创建仅包含这3个属性的视图模型类.例:

public class PownerViewModel
{
    public int OwnerId {get;set;}     // You should modify these
    public string Petowner {get;set;} // properties types
    public string OStreet {get;set;}  // since I don't exactly know what they are
}

..并修改您的查询:

public ActionResult Index()
{
     const int pageSize = 5;
     var model = from p in db.powners
                 where p.petowner.StartsWith("")
                 orderby p.petowner.Skip(0).Take(pageSize)
                 select new PownerViewModel()
                 {
                     OwnerId = p.ownerid,Petowner = p.petowner,OStreet = p.ostreet                          
                  };
     return View(model);
}

..当然在您的视图中更改模型类型:

@model System.Collections.Generic.IEnumerable<PownerViewModel>

附:因为我在这里编码,所以可能会有一些错误或拼写错误.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读