我正在使用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();
}
它非常令人困惑,我无法想到如何为城市,地点和事件生成适当的链接,并实现上述结果。
答案 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 }
});