gpt4 book ai didi

c# - MVC 页面显示多个相关的 ViewModels 使用 ajax 更新

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:31 28 4
gpt4 key购买 nike

我有一些简单的列表管理页面,每个都是针对以下 ViewModel 强类型化的

public class ListManagementIndexViewModel
{
public Guid Id { get; set; }
public string Name { get; set; }
}

我有类别、优先级、状态和其他一些下拉列表的 View ,有一些 AutoMapper 配置可确保 Name属性绑定(bind)到域模型可能对实体具有的任何内容。这个想法是系统管理员能够管理这些列表中的内容(创建新的、编辑现有的和删除)。这为我提供了一个像这样的索引 View :

Priority list management

我想将所有这些放在一个页面上,而不是每个都有单独的 View 。 认为 partials 可能是执行此操作的方法,但我不清楚这是否是推荐的方法?

我也不清楚如何处理 Controller 。就目前情况而言;使用 PriorityController 我有以下索引 ActionResult

public ActionResult Index(string searchString, string currentFilter, int? page)
{
if (Request.HttpMethod == "GET")
searchString = currentFilter;

ViewBag.CurrentFilter = searchString;
int pageNumber = page ?? 1;

var query = Session.QueryOver<Priority>();

if (!string.IsNullOrWhiteSpace(searchString))
query.WhereRestrictionOn(p => p.PriorityName)
.IsInsensitiveLike(String.Format("%{0}%", searchString));

var result = query.OrderBy(p => p.PriorityName).Asc.List();

var viewModel = AutoMapper.Mapper.Map<IEnumerable<Priority>,
IEnumerable<ListManagementIndexViewModel>>(result)
.ToPagedList(pageNumber, PageSize);

return View(viewModel);
}

虽然我可以将其移动到 'Master' 单个列表管理页面,但我也需要对其他列表类型执行相同的操作,但是我会怎么做ViewModel 需要看起来像,目前有 5 个列表要管理,所以我有 5 个 Controller 做完全相同的事情,只是类型不同。如果我将所有这些都放在 1 个 'Master' 单 View 页面上,我将以某种方式将所有 5 个 PagedList 集合填充到 1 个 ViewModel 中,然后在 'Master' 单 View 中版本将数据传递给相关的 Partials Razor 代码?

另外,我将如何处理其他 Controller 操作(编辑、创建和删除)?

更新
立足思考——如果统一/单一 View 页面 ViewModel 是:

public class ListManagementIndexViewModel
{
public Dictionary<string, IPagedList<T>> ManagementLists { get; set; }
}

SinglePageController 是

public ActionResult Index(string searchString, string currentFilter, int? page)
{
var priorities = GetPriorities(searchString, currentFilter, page);
var categories = GetCategories(searchString, currentFilter, page);

Dictionary<string, IPagedList> viewModel
= new Dictionary<string, IPagedList<T>>();

viewModel.Add("Priorities", priorities);
viewModel.Add("Categories", categories);
return View(viewModel);
}

我可以将现有逻辑移出到一个私有(private)方法中

private IPagedList<Priority> GetPriorities(string searchString, 
string currentFilter, int? page)
{
if (Request.HttpMethod == "GET")
searchString = currentFilter;

ViewBag.CurrentFilter = searchString;
int pageNumber = page ?? 1;

var query = Session.QueryOver<Priority>();

if (!string.IsNullOrWhiteSpace(searchString))
query.WhereRestrictionOn(p => p.PriorityName)
.IsInsensitiveLike(String.Format("%{0}%", searchString));

var result = query.OrderBy(p => p.PriorityName).Asc.List();

var priorities = AutoMapper.Mapper.Map<IEnumerable<Priority>,
IEnumerable<ListManagementIndexViewModel>>(result)
.ToPagedList(pageNumber, PageSize);

return priorities;
}

然后在我的 View 中,模型将包含 ManagementLists收藏,我可以 foreach像我目前所做的那样将结果放入 html 表中,但在单独的页面上。

然而,对结果进行分页将导致所有列表表分页,而不仅仅是优先级表。我将如何使用 Ajax 进行每次更新,以便在一个表中进行分页只会更新该表中的列表?如果我要重新包括搜索,它目前在 ActionResult 方法中,但没有在 UI 中实现,那么也只需要更新 Priorities 表。例如,如果我在搜索优先级时输入“高”,我只想查询优先级表并更新它,而不是对数据库运行 5 个查询以在类别或任何其他列表中搜索“高”。

最佳答案

我认为您应该只使用部分如果您打算再次使用它。我经常看到人们创建它们来帮助分解代码,但它们再也没有被使用过。

将 5 个列表放在一个页面下会更有条理,这样它们都在一个模型中,并且由一个 Controller /模型集中管理

关于c# - MVC 页面显示多个相关的 ViewModels 使用 ajax 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15669191/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com