应用程序
如果指定了 CoId,我有一个包含给定公司的客户列表的视图,否则,所有注册的客户都会出现在列表中。HanlderId 只代表谁在处理客户端。该列表是分页的(因此是 page 参数)和排序,因此在下面的代码中是 sortField 和 sortDir。一切正常,除了路线。所以...
设置
我有一个带有以下路线的区域注册文件:
context.MapRoute(
"Companies_Clients",
"Companies/Clients/Page/{page}/{sortField}/{sortDir}/{HandlerId}/{CoId}",
new
{
controller = "MyController",
action = "Index",
CoId = -1,
HandlerId = -1,
page = 1,
sortField = "ClaimId",
sortDir = "ASC",
AccidentDate = UrlParameter.Optional,
DateOfBirth = UrlParameter.Optional,
ClientSurname = UrlParameter.Optional,
InvoiceNumber = UrlParameter.Optional
}
);
默认为 UrlParameter.Optional 的参数是搜索参数(列表也可以搜索)。
我在 MyController 中有一个动作定义如下:
public virtual ActionResult Index(
Nullable<int> FeId = -1,
Nullable<DateTime> AccidentDate = null,
Nullable<DateTime> DateOfBirth = null,
string ClientSurname = null,
Nullable<int> InvoiceNumber = null,
int page = 1, string sortField = "ClaimId", string sortDir = "DESC", int SolicitorId = -1)
{
var model = service.BuildModel(FeId, AccidentDate, DateOfBirth, ClientSurname, InvoiceNumber, page, sortField, sortDir, SolId);
return View("Index", model);
}
我希望对 Index 的所有调用都与我的“Companies_Clients”路由匹配。
问题
@Html.ActionLink 帮助程序调用(参见下一个代码块)生成的 url 与“Companies_Clients”路由不匹配。
//This creates a link with a url that matches the default route (the usual one)
@Html.ActionLink("Sort by Client Name", MVC.MyArea.MyController.Index(feId, accidentDate, dateOfBirth, clientSurname, invoiceNumber, currentPage, "ClientSurname", "DESC"))
与路线匹配的是我的 mvcSiteMap 节点:
<mvcSiteMapNode title="Clients" area="Companies" controller="MyController" action="Index" key="clients">
即这个mvcsitemap节点生成的路由是:
/Companies/Clients/Page
问题
琐碎的问题是:
我究竟做错了什么??为什么 Html.ActionLink 调用不匹配路由?
另一个问题是:
为什么mvcsitemapnode生成的路由中没有出现默认参数?