标签: actionlink

如何在MVC中动态更改Html.ActionLink的类

我正在寻找一种方法来根据特定的标准在控制器中改变ActionLink的类(在模型中找不到,所以我不能在视图本身中编写条件).但我似乎无法找到允许我使用此元素工作的ViewData("名称")(我认为这是可能的,但我遗漏了一些东西).

在我看来,我有一个像这样的html助手

<%=Html.ActionLink("View", "Index", "Home")%>
Run Code Online (Sandbox Code Playgroud)

但在我的控制器中,我不知道如何引用它,如下所示添加类或onclick等属性.

ViewData("View").attributes.add("class", "active")
Run Code Online (Sandbox Code Playgroud)

css asp.net-mvc html-helper dynamic actionlink

14
推荐指数
1
解决办法
1万
查看次数

如何使用现有路由值停止ASP.Net MVC Html.ActionLink?

我正在研究的网站有一些相当复杂的路由结构,我们在使用路由引擎来构建URL时遇到了一些困难,就像我们需要构建它们一样.

我们有一个搜索结果页面,它使用基于RegEx的模式匹配将几个变量分组到一个路径段中(即"www.host.com/{structuralParameters}"可以是:"www.host.com/variableA-variableB- variableC" - 其中变量A到C都是可选的).经过一番工作,这对我们很有用.

我们遇到的问题解决了ActionLink方法令人讨厌的特性:如果指向相同的控制器/操作,它将保留现有的路由值,无论您是否需要它们.我们更愿意控制链接的外观,在某些情况下,不能保留现有参数.一个例子是我们网站的主导航导向没有设置参数的搜索结果页面 - 如果您愿意,可以使用默认搜索页面.我说这是一个烦人的功能,因为它是一个罕见的ASP.Net MVC框架实例,似乎在没有明显扩展点的情况下决定实现 - 我们宁愿不在我们的母版页中创建自定义ActionLink代码来编写简单的导航链接!

我已经看到有人说你需要明确地将这些参数设置为空字符串,但是当我们尝试这个时它只是将参数从路由值更改为查询字符串参数.对我来说似乎不应该要求我们明确地将我们未明确传递的值作为参数传递给ActionLink方法,但如果这是我们唯一的选项,我们将使用它.但是,目前如果它在查询字符串中显示,那么将参数直接放入路径对我们来说是无用的.

我知道我们的路由结构加剧了这个问题 - 如果我们使用更简单的方法(即www.host.com/variableA/variableB/variableC),我们可能不会有任何问题,但我们的URL结构不可协商 - 它是旨在满足与可用性,SEO和链接/内容共享相关的非常具体的需求.

我们如何使用Html.ActionLink生成页面链接而不会回退当前路径数据(或者,如果可能,需要明确排除路径段),即使这些链接导致相同的操作方法?

如果我们确实需要明确排除路径段,我们如何防止该方法将路由呈现为查询字符串参数?

这个看似很小的问题给我们带来了惊人的悲痛,我将感谢您解决它的任何帮助.

编辑:根据LukLed的要求,这是一个示例ActionLink调用:

// I've made it generic, but this should call the Search action of the 
// ItemController, the text and title attribute should say "Link Text" but there
// should be no parameters - or maybe just the defaults, depending on the route.
// 
// Assume that this can be called from *any* page but should not be …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc routing actionlink

13
推荐指数
1
解决办法
8690
查看次数

MVC Ajax.ActionLink找不到POST方法

我在我的控制器中声明了一个POST方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateComments(int id, string comments)
{
    // ... 
}
Run Code Online (Sandbox Code Playgroud)

和我认为的ActionLink:

<%= Ajax.ActionLink("update", "UpdateComments", 
                        new { id = Model.Id, comments = "test" }, 
                        new AjaxOptions { 
                                HttpMethod="POST", 
                                OnFailure="alert('fail');", 
                                OnSuccess = "alert('success');" 
                            })%>
Run Code Online (Sandbox Code Playgroud)

尝试路由此请求时出现"未找到"错误.

如果我从控制器中的UpdateComments方法中删除POST限制,它可以正常工作.

我错过了什么?

c# routing asp.net-ajax actionlink asp.net-mvc-2

13
推荐指数
1
解决办法
1万
查看次数

从Controller内部使用Html.ActionLink和Url.Action(...)

我想编写一个HtmlHelper来渲染具有预设值的ActionLink,例如.

<%=Html.PageLink("Page 1", "page-slug");%>
Run Code Online (Sandbox Code Playgroud)

where PageLink是一个ActionLink使用已知Action和Controller 调用的函数,例如."索引"和"页面".

由于HtmlHelper并且UrlHelper不存在于Controller类或类中,如何从类中获取动作的相对URL?

更新:鉴于我现在有额外三年积累的经验,这是我的建议:只是使用Html.ActionLink("My Link", new { controller = "Page", slug = "page-slug" })或更好,

<a href="@Url.Action("ViewPage",
                     new {
                           controller = "Page",
                           slug = "my-page-slug" })">My Link</a>
Run Code Online (Sandbox Code Playgroud)

您的扩展方法可能很简单,但它会为招聘添加另一个未经测试的失败点和新的学习要求,而不会增加任何实际价值.将其视为设计复杂系统.为什么要添加另一个移动部件,除非它增加可靠性(否),可读性(很少,一旦你阅读更多文档),速度(无)或并发(无).

asp.net-mvc html-helper actionlink urlhelper html.actionlink

12
推荐指数
1
解决办法
2万
查看次数

是否可以使用包含元素的ActionLink?

正如问题所说,是否可以使用包含元素的ActionLink,如果没有,实现它的最佳方法是什么?

例如,假设我有一个Span元素,我希望整个事情是一个超链接...以下工作:

<a href="/Site/Page/@Model.ID?Type=test">
                <span class="box5">Click anywhere in this box</span> </a>
Run Code Online (Sandbox Code Playgroud)

想象一下,span/css类box5使这个大...原来是一个DIV,但是,我发现它没有遵循标准,这似乎遵循确定.

这呈现并且工作正常,但是,无论如何使用ActionLink代替?我试图猜测语法,如(从表单复制):

@using (Html.Actionlink){<span class="box5">Click anywhere in this box</span>}
Run Code Online (Sandbox Code Playgroud)

没有任何运气的许多其他组合.

现在,我的手动HTML解决方法工作正常,我很高兴离开它,但是,是否可以使用MVC ActionLink,如果是,我是否应该担心/是否会有任何好处?

c# syntax actionlink razor asp.net-mvc-3

12
推荐指数
2
解决办法
6749
查看次数

如何在ActionLink中包含书签/片段?

可能重复:
在asp.net mvc Html.ActionLink中包含锚标记

代码 : @Html.ActionLink("Link", "Action", "Controller", new { id = Id } )

目前我可以生成这样的链接:

HTTP:// mywebsite /控制器/动作/身份证

我想生成一个这样的链接:

HTTP:// mywebsite /控制器/动作/编号DIVID

但我无法编辑路线/创建另一条路线.

什么是最好的解决方案?

bookmarks actionlink razor asp.net-mvc-3

11
推荐指数
1
解决办法
2495
查看次数

有条件地将htmlAttributes添加到ASP.NET MVC Html.ActionLink

我想知道是否可以在对方法的调用中有条件地添加参数.

例如,我在我的Site.Master中渲染一堆链接(总共六个)用于导航:

<%= Html.ActionLink("About", "About", "Pages") %> | 
<%= Html.ActionLink("Contact", "Contact", "Pages") %>
<%-- etc, etc. --%>
Run Code Online (Sandbox Code Playgroud)

如果它在该页面上,我想为链接包含一个"选定"的CSS类.所以在我的控制器中我回来了:

ViewData.Add("CurrentPage", "About");
return View();
Run Code Online (Sandbox Code Playgroud)

然后在视图中我有一个htmlAttributes字典:

<% Dictionary<string,object> htmlAttributes = new Dictionary<string,object>();
   htmlAttributes.Add("class","selected");%>
Run Code Online (Sandbox Code Playgroud)

现在我唯一的问题是如何为正确的ActionLink包含htmlAttributes.我可以通过这种方式为每个链接做到这一点:

<% htmlAttributes.Clear();
   if (ViewData["CurrentPage"] == "Contact") htmlAttributes.Add("class","selected");%>
<%= Html.ActionLink("Contact", "Contact", "Pages", htmlAttributes) %>
Run Code Online (Sandbox Code Playgroud)

但这似乎有点重复.有没有办法做这样的psuedo代码:

<%= Html.ActionLink("Contact", "Contact", "Pages", if(ViewData["CurrentPage"] == "Contact") { htmlAttributes }) %>
Run Code Online (Sandbox Code Playgroud)

这显然不是有效的语法,但有没有正确的方法呢?我对提供这些链接的任何完全不同的建议持开放态度.我想继续使用像ActionLink这样的东西,利用我的路线,而不是硬编码标签.

c# parameters asp.net-mvc conditional actionlink

10
推荐指数
1
解决办法
2万
查看次数

Raw ActionLink linkText

我想把一个按钮作为文本,@ActionLink()但我不能,因为它HTML转义我的字符串......我找到了@Html.Raw()机制,并尝试了@ActionLink().ToHtmlString()但无法弄清楚如何把它放在一起...

我找到了一篇文章,描述了为类似目的构建扩展,但是为了解决这个问题真是太过分了......必须有一个简单的方法吗?

html-helper actionlink razor asp.net-mvc-3

9
推荐指数
1
解决办法
5761
查看次数

如何制作没有文字的html.actionlink,但里面有图片

这是简单的HTML:

<%--
<a href="?language=de">
    <img src="/Images/Company/de.png" alt="Webseite auf Deutsch" style="border: 0;" />
</a>
--%>
Run Code Online (Sandbox Code Playgroud)

我想从他们做html.actionlink:

 <%= Html.ActionLink("", "ChangeCulture", "Account", new { lang = "de", returnUrl = this.Request.RawUrl }, new { @style = "background-image: url(/Images/Company/de.png)", @class = "languageLink" }) %>
Run Code Online (Sandbox Code Playgroud)

我希望我的链接没有文字.它不起作用,在第一个参数中为null,不允许.图像是正常的短.我怎么能使用html.actionlink没有文字,但有图像?

html asp.net-mvc actionlink

8
推荐指数
2
解决办法
2万
查看次数

ASP.NET MVC:在其中生成带有自定义html的动作链接


如何在里面生成自定义html的动作链接.
如下:
<a href="http://blah-blah/.....">
<span class="icon"/> New customer
</a>

asp.net-mvc actionlink asp.net-mvc-2

8
推荐指数
1
解决办法
4952
查看次数