asp.net-mvc-3 – 我可以传递视图模型到动作链接来生成路由吗?
|
我需要创建一个基于我的搜索条件的链接.例如: localhost/Search?page=2&Location.PostCode=XX&Location.Country=UK&IsEnabled=true 此链接中的参数是SearchViewModel中属性的值. 理想情况下,我想要做一些事情: @Html.ActionLink("Search","User",Model.SearchCriteria)
这是否被默认支持,还是需要将我的视图模型的属性传递给RouteValueDictionary类型对象,然后使用? 我的目标是编写一个页面助手,它将生成页码,并将搜索条件参数附加到生成的链接. 例如. @Html.GeneratePageLinks(Model.PagingInfo,x => Url.Action("Index"),Model.SearchCriteria)
我将您的解决方案与PRO ASP.NET MVC 3书籍的建议相结合,最终结合如下: 帮助生成链接.有趣的部分是pageUrlDelegate参数,后来用于调用Url.Action生成链接: public static MvcHtmlString PageLinks(this HtmlHelper html,PagingInfoViewModel pagingInfo,Func<int,String> pageUrlDelegate)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= 5; i++)
{
TagBuilder tagBuilder = new TagBuilder("a");
tagBuilder.MergeAttribute("href",pageUrlDelegate(i));
tagBuilder.InnerHtml = i.ToString();
result.Append(tagBuilder.ToString());
}
return MvcHtmlString.Create(result.ToString());
}
然后在视图模型中: @Html.PageLinks(Model.PagingInfo,x => Url.Action("Index","Search",new RouteValueDictionary()
{
{ "Page",x },{ "Criteria.Location.PostCode",Model.Criteria.Location.PostCode },{ "Criteria.Location.Town",Model.Criteria.Location.Town},{ "Criteria.Location.County",Model.Criteria.Location.County}
}))
)
我仍然不满足Strings中的物业名称,但现在必须要做. 谢谢 :) 解决方法
不幸的是,这是不可能的.你必须逐个传递属性.你可以使用一个RouteValueDictionary的重载: @Html.ActionLink(
"Search",new RouteValueDictionary(new Dictionary<string,object>
{
{ "Location.PostCode",Model.SearchCriteria.PostCode },{ "Location.Country",Model.SearchCriteria.Country },{ "IsEnabled",Model.IsEnabled },})
)
当然最好编写一个自定义的ActionLink帮助器来做到这一点: public static class HtmlExtensions
{
public static IHtmlString GeneratePageLink(this HtmlHelper<MyViewModel> htmlHelper,string linkText,string action)
{
var model = htmlHelper.ViewData.Model;
var values = new RouteValueDictionary(new Dictionary<string,object>
{
{ "Location.PostCode",model.SearchCriteria.PostCode },model.SearchCriteria.Country },model.IsEnabled },});
return htmlHelper.ActionLink(linkText,action,values);
}
}
接着: @Html.GeneratePageLink("some page link text","index")
另一种可能性是仅传递ID,并且控制器操作从最初在执行该视图的控制器操作中提取相应的模型和值. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .net – Structuremap – 多个接口实现
- 转:[WebServices]介绍
- “超频”处理ASP.NET应用的技术
- asp.net – HTTPModule BeginRequest应该是Response.Redire
- asp.net-mvc – HttpCache vs Singleton – MVC应用程序的最
- asp.net-mvc-3 – 何时在Mvc3中使用ViewBag,ViewData或Temp
- iis-7 – 本地语言的布尔值
- ASP.NET MVC和FubuMVC之间的主要区别是什么?
- asp.net-mvc – jqGrid和MVC3 – 添加模型验证
- asp.net-mvc-4 – SimpleMembership – 向UserProfile添加电
- asp.net-mvc-3 – 使用Ninject获取对象的实例
- asp.net-mvc – 使用与状态模式合并的域模型
- asp.net-mvc – 运行Asp.Net Mvc作为OWIN中间件?
- asp.net-mvc-4 – DataAnnotation的必需属性
- 实体框架 – 实体框架UnintentionalCodeFirstExc
- asp.net-mvc – Mvc验证正则表达式只有数字?
- asp.net – Visual Studio可以在新的调试会话中重
- asp.net-mvc-4 – ASP.NET Web API架构建议/反馈
- asp.net – ASP .Net Web API下载图像为二进制
- ASP.NET MVC错误处理 – 删除aspxerrorpath
