我的视图中有一个下拉菜单,类似于“全部,已读/未读,类别”。该视图为用户呈现通知。
在控制器中有一个默认的ActionResult来显示所有,一个用于读取/未读取,一个用于显示类别。
我想使用工厂根据上面选择的下拉列表调用其中一个方法(即未读的选定调用未读ActionResult,原因是我不想使用switch / if语句来维护可维护的代码,我只是不确定实施。
答案 0 :(得分:1)
为什么不使用正确的网址作为SelectListItem
的值,并使用此值重定向/加载内容?
在GET用例的ViewModel中:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
var availableOptions = new List<SelectListItem> {
new SelectListItem {
Text = "All",
Value = urlHelper.Action("GetAll", "Notifications"),
Selected = true
},
new SelectListItem {
Text = "Read/Unread",
Value = urlHelper.Action("GetReadOrUnread", "Notifications"),
Selected = false
},
new SelectListItem {
Text = "Categories",
Value = urlHelper.Action("GetCategories", "Notifications"),
Selected = false
}
};
在你的剃须刀视图中:
@Html.DropDownListFor(m => m.SelectedView, Model.AvailableOptions)
<script>
$(document).ready(function() {
// use @Html.IdFor so this does not break
// if you rename the SelectedView property in the ViewModel
var dropdown = $('#@Html.IdFor(m => m.SelectedView)');
dropdown.on('change', function () {
// this gets the "value" attribute of the selected option
var selectedUrl = $('option:selected', dropdown).val();
$.ajax({
url: selectedUrl,
success: function(result){ /* insert retrieved HTML into DOM ... */ }
});
});
});
</script>