使用局部视图和链接asp.net mvc 3,似乎是从另一个控制器返回查询结果

时间:2011-08-15 15:35:50

标签: linq asp.net-mvc-3 razor

我有一个控制器可以返回特定类别的业务

 public ViewResult Browse(int? id)
 {

     var companyquery = from c in db.Advertises
                        where c.CategoryID == id && c.showentry
                        select c;


        return View(companyquery);


    }

当用户点击分类时,前三个列表是“优先级”列表。我在我的模型中为优先级1,2和3创建了三个bool。我编写了以下三个控制器,它们返回部分视图以获得这些结果;

 public ActionResult P1()
    {
        var presult1 = from ap in db.Advertises
                       where ap.priority1
                       select ap;

        return View(presult1);
    }



    public ActionResult P2()
    {
        var presult2 = from bp in db.Advertises
                       where bp.priority2 && bp.showentry == true
                       select bp;

        return View(presult2);
    }



    public ActionResult P3()
    {
        var presult3 = from cp in db.Advertises
                       where cp.priority3
                       select cp;

        return View(presult3);
    }

这些部分视图包含在我的“浏览”(参见第一个控制器)视图中,如此;

<div id="pri1">


@Html.Partial("P1")

</div>

<div id="pri2">

@Html.Partial("P2")

</div>

<div id="pri3">

@Html.Partial("P3")

</div>


@foreach (var item in Model)
{

<div class="company">

     <div class="compimg">
         <img src=@Html.DisplayFor(modelItem => item.ImageUrl) alt ="pic"  />
            </div>
      <div class="compname">
         @Html.DisplayFor(modelItem => item.companyname)
            </div>
         <ul class="social......

我希望这包括页面顶部的优先级列表和它下面的正常列表。相反,这三个控制器返回相同的结果。这是我模型的相关部分;

 [DisplayName("Priority 1 listing?")]
    public bool priority1 { get; set; }
     [DisplayName("Priority 2 listing?")]
    public bool priority2 { get; set; }
     [DisplayName("Priority 3 listing?")]
    public bool priority3 { get; set; }
     [DisplayName("Display Listing?")]
    public bool showentry { get; set; }

我在这里写什么?提前谢谢!

修改

这是单独的控制器和完整视图,返回正常;

    public class P1Controller : Controller
{

    private DataContext db = new DataContext();
    //
    // GET: /P1/

    public ActionResult P1()
    {
        var presult1 = from ap in db.Advertises
                       where ap.priority1
                       select ap;

        return View(presult1);
    }

}

}

@model IEnumerable<NewAtAClick.Models.Advertise>

@{
ViewBag.Title = "P1";
 }

P1

 <p>
@Html.ActionLink("Create New", "Create")
 </p>
 <table>
<tr>
    <th>
        CategoryID
    </th>
    <th>
        AdName
    </th>
    <th>
        phone
    </th>
    <th>
        prefcontact
    </th>
    <th>
        phonecontact
    </th>
    <th>
        priority1
    </th>
    <th>
        priority2
    </th>
    <th>
        priority3
    </th>
    <th>
        showentry
    </th>
    <th></th>
    </tr>

     @foreach (var item in Model) {
   <tr>
    <td>
        @Html.DisplayFor(modelItem => item.CategoryID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.AdName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.phone)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.prefcontact)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.phonecontact)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.priority1)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.priority2)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.priority3)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.showentry)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.AdvertiseID }) |
        @Html.ActionLink("Details", "Details", new { id=item.AdvertiseID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.AdvertiseID })
    </td>
   </tr>

}

</table>

2 个答案:

答案 0 :(得分:2)

而不是

@Html.Partial("P1")

尝试:

@Html.Action("P1")

P2P3。这样您实际上将调用相应的控制器操作。有关Html.Action帮助程序的详细信息,请查看following blog post。另外,为了避免任何递归问题,请确保在3控制器操作中返回PartialView而不是ViewP1.cshtml部分集Layout = null内。

答案 1 :(得分:0)

根据事物的外观,您实际上并未调用P1P2P3的操作,您只是使用相同的名称来删除部分视图。

您是否确认无论您在部分视图中进行的操作是否正确?