gpt4 book ai didi

asp.net-mvc-3 - 我可以将 View 模型传递给操作链接以生成路线吗?

转载 作者:行者123 更新时间:2023-12-04 01:01:00 25 4
gpt4 key购买 nike

我需要创建一个基于我的搜索条件的链接。例如:

localhost/Search?page=2&Location.PostCode=XX&Location.Country=UK&IsEnabled=true 

此链接中的参数是我的 SearchViewModel 中的属性值。

理想情况下,我希望有以下内容:
@Html.ActionLink("Search","User", Model.SearchCriteria)

这是默认支持的还是我需要将我的 View 模型的属性传递到 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());
}

然后在 View 模型中:
@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}
}))
)

我仍然对字符串中的属性名称不满意,但现在必须这样做。

谢谢:)

最佳答案

Ideally I'd like to have something on the lines of:

@Html.ActionLink("Search","User", Model.SearchCriteria)



不幸的是,这是不可能的。您将必须一项一项地传递属性。您确实可以使用带 RouteValueDictionary 的重载:
@Html.ActionLink(
"Search",
"User",
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 },
{ "Location.Country", model.SearchCriteria.Country },
{ "IsEnabled", model.IsEnabled },
});
return htmlHelper.ActionLink(linkText, action, values);
}
}

进而:
@Html.GeneratePageLink("some page link text", "index")

另一种可能性是仅通过 id并让 Controller 操作从您最初在呈现此 View 的 Controller 操作中获取的任何位置获取相应的模型和值。

关于asp.net-mvc-3 - 我可以将 View 模型传递给操作链接以生成路线吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com