Asp.net mvc 如何修改从基本控制器(MVC4)返回的视图模型
我正在尝试实现基本控制器、应用程序服务和存储库设计。我对OO设计的这一层次还不熟悉,但已经基本完成了。剩下的障碍是如何处理扩展我的基本控制器 我的目标:Asp.net mvc 如何修改从基本控制器(MVC4)返回的视图模型,asp.net-mvc,inheritance,asp.net-mvc-4,Asp.net Mvc,Inheritance,Asp.net Mvc 4,我正在尝试实现基本控制器、应用程序服务和存储库设计。我对OO设计的这一层次还不熟悉,但已经基本完成了。剩下的障碍是如何处理扩展我的基本控制器 我的目标: 有一个可以独立站立的基本控制器…即。您可以让一个特定的控制器从它继承,但它本身是空的,并让它工作 如果需要扩展基本控制器,请使用 在特定控制器中执行此操作的能力 以下是我所拥有的: 基本控制器: public class BaseControllerSingle<TRepository, TViewModelSingle> : Ba
public class BaseControllerSingle<TRepository, TViewModelSingle> : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
public virtual ActionResult Edit(
int id = 0,
string pageTitleNoun = "",
Expression<Func<TRepository, bool>> predicate = null
)
{
TViewModelSingle viewModelSingle = new TViewModelSingle();
ViewBag.Mode = "EDIT";
if (id == 0) //Add new company mode
{
viewModelSingle = _baseAppServSingle.CreateNewViewModel(CurrentUserId);
ViewBag.Header = "Create New " + pageTitleNoun;
ViewBag.Mode = "NEW";
return View(viewModelSingle);
}
//else edit existing record mode
viewModelSingle = _baseAppServSingle.CreateEditViewModel(id, predicate);
ViewBag.Header = "Edit " + pageTitleNoun;
return View(viewModelSingle);
}
我决定重新编写一些代码来消除这种必要性。我想也许可以用Ninject来做……但这不是我现在想做的事情。。。看起来你好像陷入了困境。我建议您重构代码,这样您就可以更容易地重用它,而不是试图得到一个精心设计的路由方案来为您执行。您是否尝试过使用局部视图来实现您的目标?祝你好运。是的,我已经决定重新编写一些代码来消除这种必要性。我想也许可以用Ninject来做……但这不是我现在想做的事情。
public class ManageItemsController : BaseController
...
// GET: /InventoryMgmt/ManageItems/Edit/5
public ActionResult Edit(int id = 0)
{
ActionResult actionResult = GetBaseControllerSingle().Edit(
"Material",
id,
x => x.Id == id && x.CompanyId == CurrentCompanyId);
ItemViewModel viewModel = actionResult(ItemViewModel);
if (id == 0)
{
viewModel = _manageItemsAppServ.CreateNewViewModel(viewModel, CurrentCompanyId);
}
viewModel.DDLOptions = _manageItemsAppServ.CreateFilterOptionsViewModel(CurrentCompanyId);
return View(viewModel);
}