ASP.NET中的HTML.ActionLink与Url.Action Razor

HTML.ActionLinkUrl.Action之间有什么区别,或者他们只是两种做同样的事情?

我应该什么时候比另一个更喜欢?

是,有一点不同。 Html.ActionLink生成一个<a href=".."></a>标记,而Url.Action只返回一个url。

例如:

 @Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null) 

产生:

 <a href="/somecontroller/someaction/123">link text</a> 

Url.Action("someaction", "somecontroller", new { id = "123" })生成:

 /somecontroller/someaction/123 

还有执行子控制器操作的Html.Action 。

Html.ActionLink自动生成一个<a href=".."></a>标签。

Url.Action只生成一个url。

例如:

 @Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null) 

产生:

 <a href="/controllerName/actionName/<id>">link text</a> 

 @Url.Action("actionName", "controllerName", new { id = "<id>" }) 

产生:

 /controllerName/actionName/<id> 

我喜欢的最佳加点是使用Url.Action(...)

您正在创build自己的锚标签,您可以轻松地设置自己的链接文本,即使使用其他一些HTML标签。

 <a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })"> <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> /> @Html.DisplayFor(model => model.<SomeModelField>) </a> 
 <p> @Html.ActionLink("Create New", "Create") </p> @using (Html.BeginForm("Index", "Company", FormMethod.Get)) { <p> Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string) <input type="submit" value="Search" /> <input type="button" value="Clear" onclick="location.href='@Url.Action("Index","Company")'"/> </p> } 

在上面的例子中,你可以看到,如果我特别需要一个button来做一些动作,我必须用@ Url.Action来做,而如果我只是想要一个链接,我会使用@ Html.ActionLink。 重点是当你必须使用一些元素(HTML)的动作url使用。

通过使用适当的CSS样式,您可以轻松地将Html.ActionLink作为button呈现。 例如:

 @Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" }) 

我使用下面的代码来创build一个button,它为我工作。

 <input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>