我有一个包含名为userid的表单字段的详细信息页面。在同一个页面上,我有另一个搜索表单,其中包含一个名为userid的字段。
我在两个不同的视图模型上使用html.labelfor(vm>vm.userid)和html.textbox for(sm>sm.userid),vm是视图模型,sm是搜索模型。(是的,两个模型上的userid属性具有相同的名称-因为它们是相同的域属性。
当我导航到该页面时,VM上填充的用户ID被插入到MVC命名为userid的两个表单字段中。甚至sm.userid也是空的。
这是我最初的问题。我有几种方法可以避免这种情况。我的解决方案是为SM使用前缀标志。
[HttpGet]
public ActionResult Search([Bind(Prefix = "Search")] SearchFormViewModel searchFormViewModel, PagingViewModel pagingViewModel)
{
这将激发MVC在搜索表单中的字段名上呈现search.userid,但代码中的属性仍将命名为userid。
这个解决方案似乎效果很好!
但是:
现在,我必须在global.asax的一个路由上找到search.userid。
我画的路线是这样的:
routes.MapRoute(
"MyRouteName",
"ControllerName/User/{Search.UserId}",
new { controller = "ControllerName", action = "Search" }
);
我的问题是,MVC无法将search.userid(因为)映射为适合上面所示操作中的userid(前缀为search)。
因此,MVC似乎有一个前缀功能,实际上通过路由处理程序完全支持它。
当然,我可以将search.userid重命名为search_userid,但是名称dosent与上面receiving操作中MVC期望的名称匹配。(expects search.userid)重命名搜索模型的userid属性可以解决此问题,但由于它在域中的值相同,因此这似乎是一种解决方法。
我是否遗漏了前缀功能的用法,或者这是不可能的?