0

我有一个 HomePageViewModel,它采用各种模型并在主页上显示摘要视图。

我想根据下拉列表的结果过滤 Announcements 模型,我将其呈现为无序列表。这是我第一次使用部分视图或类似的东西,在阅读了一些内容后决定使用 HTML.Action 调用,该调用从 Announcement Controller 调用 DisplayAnnouncements。

但是,我不确定如何将列表中单击的参数(下例中的“#”)传递给我的 HTML.Action 方法。

这是主页视图:

<ul class="dropdown-menu">
    <li><a href="#">All</a></li>
    <li><a href="#">Legal</a></li>
    <li><a href="#">Accounting</a></li>
</ul>
@Html.Action("DisplayAnnouncments", "Announcement", new { filter = "All" })

这是我的公告控制器:

    public ActionResult DisplayAnnouncments(string filter)
    {

        return PartialView("_Announcements", 
            (from a in db.Announcements
             where a.Type == filter
             select a).Take(4));
    }

我的 _Annoucments 部分观点:

<table class="table" style="table-layout: fixed">

@foreach (var item in Model)
{
    <tr>
        <td style="vertical-align: top; width: 70px">
            @item.AnnouncmentDate.ToShortDateString()
        </td>
        <td>
            <strong>@item.Title</strong><br />
            @item.Announcment
        </td>
    </tr>
}

所以重申一下,我有几个问题:

  1. 如何获取用户单击的列表项以在我的 HTML.Action 中填充适当的过滤器?
  2. HTML.Action 是这里最好的东西吗?我应该使用别的东西吗?
  3. 如何只刷新部分视图而不刷新整个页面?

感谢您的帮助,我对此很陌生!

罗比

4

1 回答 1

0

最简单的方法可能是使用一些 javascript 将下拉选择的值复制到局部视图的隐藏字段中,然后模拟单击您的局部视图(隐藏)提交按钮之一。

部分观点:

<table class="table" style="table-layout: fixed">

<input type="hidden" id="MyHiddenInput" name="selectedValue" />
@foreach (var item in Model)
{
    <tr>
        <td style="vertical-align: top; width: 70px">
            @item.AnnouncmentDate.ToShortDateString()
        </td>
        <td>
            <strong>@item.Title</strong><br />
            @item.Announcment
        </td>
    </tr>
}
<div style="display: none;"><input type="submit" id="myHiddenButton" /></div>

父视图:

<ul class="dropdown-menu">
    <li><a href="#" data-hval="all">All</a></li>
    <li><a href="#" data-hval="legal">Legal</a></li>
    <li><a href="#" data-hval="accounting">Accounting</a></li>
</ul>

和一些 jQuery:

$("dropdown-menu > LI > A").live("click", function() {
    $("#MyHiddenInput").val($(this).data("hval"));
    $("#myHiddenButton").click();
});
于 2013-06-10T11:58:57.723 回答