动态行动链接

时间:2013-03-13 09:02:27

标签: c# asp.net asp.net-mvc

我正在使用asp.net mvc 4,我有以下场景

Cities           Places     Events
------           ------------------
City 1          |                  
City 2          |
                |

左侧导航(城市)列出数据库中的所有城市。地方和事件也是行动方法的链接。

<li>@Html.ActionLink("Places", "Places", null, new{id="placeslink"})</li>
<li>@Html.ActionLink("Events", "Events", null, new{id="eventslink"})</li>

我使用以下脚本(jQuery)异步加载Places和事件

$('#placeslink').click(function (event) {
    event.preventDefault();

    var url = $(this).attr('href');
    $('#content').html(ajax_load).load(url);
});

$('#eventslink').click(function (event) {
    event.preventDefault();

    var url = $(this).attr('href');
    $('#content').html(ajax_load).load(url);
});

单击“地方和事件”链接时,它正常工作并从数据库填充页面上的所有地点(非特定于城市)和事件。

现在我想要实现的是,当用户在查看地点时单击城市时,仅显示该城市中的地点,如果选择了事件,则相同的城市链接应显示该城市中的事件。 类似地,如果选择城市(例如城市1)并且用户点击地点,则显示所选城市中的地点,如果她点击事件,则显示所选城市的事件。

我有以下行动方法

public ActionResult Places()
{
  if (Request.IsAjaxRequest())
  {
     ....  
     return PartialView(model);               

  }
  return View();
}

它非常令人困惑,我无法想到如何为城市,地点和事件生成适当的链接,并实现上述结果。

1 个答案:

答案 0 :(得分:1)

尝试一下,我会像这样制作视图模型

public class PlacesAndEventsViewModel
{
    public string LocationOption { get; set; }  //places or events

    public List<Place> Places { get; set; }

    public List<Event> Events { get; set; }

    public int? CityID { get; set; }
}

我的控制器

//this is get
public ActionResult  ShowLocations()
{
    var model = new PlacesAndEventsViewModel();

    model.CityID = null; //or any default value
    model.LocationOption = "places"; //or any default value
    model.Places = new List<Place>(); //or GetAllPlacesFromDB();
    //You can do the same for events but I think you need one at a time

    return View("ViewPlaces", model);
}

[HttpPost]
public ActionResult  ShowLocations(PlacesAndEventsViewModel model)
{
    if(model.LocationOption == "places")
    {
        model.Places = GetAllPlacesByCity(model.CityID);
        return View("ViewPlaces", model);   //All these could be partial view
    }
    else if(model.LocationOption == "cities")
    {
        model.Events = GetAllEventsByCity(model.CityID);
        return View("ViewEvents", model);  //All these could be partial view
    }
    else
    {
        return View("ViewPlaces", model);  //All these could be partial view
    }
}   

您可能需要将Ajax更改为$ .ajax()

  $.ajax({
     url: '@Url.Action("ShowLocation"),
     data: { LocationOption: '@Model.LocationOption', CityID: @Model.CityID }
  });