【发布时间】:2014-02-04 13:43:43
【问题描述】:
我正在创建一个 MVC4 应用程序,它有一个显示网格的索引页面。页面的索引操作包含用于控制显示内容的搜索字符串、排序顺序、帐户 ID 和供应商 ID 的参数。
public class MyController
{
public ActionResult Index(string searchFilter="",
string sortOrder="createddate",
int accountid=0,
int vendorid=0)
{
...
}
}
在这个主页上,我可以点击网格中的行,这会将我带到创建和编辑操作。此外,我在控件上还有其他几个从索引页面调用的操作。
当我在这些视图中的任何一个上按保存或取消时([HttpPost] 操作,它们像往常一样重定向到索引操作。但是这些视图没有搜索字符串、排序顺序、帐户 ID 和供应商 ID以便索引视图可以“恢复”显示的内容。
所以我一直在将这些参数添加到其他操作方法中,并使用视图模型中方法所需的属性创建一个对象。
public class PageFeatures
{
public string SearchFilter {get; set;}
public string SortOrder {get; set;}
public int AccountId {get; set;}
public int VendorId {get; set;}
}
public class CreateViewModel
{
public PageFeatures Features { get; set; }
}
public class EditViewModel
{
public EditViewModel(int id)
{
Id=id;
}
public int Id {get; set;}
public PageFeatures Features { get; set; }
}
public class MyController
{
public ActionResult Index(string searchFilter="",
string sortOrder="createddate",
int accountid=0,
int vendorid=0)
{
...
}
public ActionResult Create(string searchFilter="",
string sortOrder="createddate",
int accountid=0,
int vendorid=0)
{
var model = new CreateViewModel();
model.Features = new PageFeatures
{
SearchFilter = searchFilter,
SortOrder = sortOrder,
AccountId = accountid,
VendorId = vendorid
}
return View(model);
}
[HttpPost]
public ActionResult Create(CreateViewModel model)
{
if(ModelState.IsValid)
{
....
return RedirectToAction("Index", new {searchFilter=model.Features.SearchFilter,
sortOrder = model.Features.SortOrder,
accounted = model.Features.AccountId,
vendorid = model.Features.VendorId} );
}
}
public ActionResult Edit( int id=0,
string searchFilter="",
string sortOrder="createddate",
int accountid=0,
int vendorid=0)
{
var model = new EditViewModel(id);
model.Features = new PageFeatures
{
SearchFilter = searchFilter,
SortOrder = sortOrder,
AccountId = accountid,
VendorId = vendorid
}
return View(model);
}
[HttpPost]
public ActionResult Edit(EditViewModel model)
{
if(ModelState.IsValid)
{
....
return RedirectToAction("Index", new {searchFilter=model.Features.SearchFilter,
sortOrder = model.Features.SortOrder,
accounted = model.Features.AccountId,
vendorid = model.Features.VendorId} );
}
}
}
但我不喜欢这种方法的地方在于,我在视图和每个控制器方法中都添加了这些值。
我在做正确的事,还是有更好的方法,比如动作过滤器,可以让这些事情变得更容易和更少重复?
【问题讨论】:
标签: asp.net-mvc-4