ASP.NET MVCの最新(RC1)リリースで、Html.ActionLinkをリンクではなくボタンまたは画像としてレンダリングするにはどうすればよいですか?
AjaxHelper
することでActionButton
)、以下で共有すると思いました。
ASP.NET MVCの最新(RC1)リリースで、Html.ActionLinkをリンクではなくボタンまたは画像としてレンダリングするにはどうすればよいですか?
AjaxHelper
することでActionButton
)、以下で共有すると思いました。
回答:
遅い応答ですが、単純にして、CSSクラスをhtmlAttributesオブジェクトに適用できます。
<%= Html.ActionLink("Button Name", "Index", null, new { @class="classname" }) %>
そして、スタイルシートにクラスを作成します
a.classname
{
background: url(../Images/image.gif) no-repeat top left;
display: block;
width: 150px;
height: 150px;
text-indent: -9999px; /* hides the link text */
}
私はUrl.Action()とUrl.Content()を次のように使用するのが好きです:
<a href='@Url.Action("MyAction", "MyController")'>
<img src='@Url.Content("~/Content/Images/MyLinkImage.png")' />
</a>
厳密に言うと、Url.Contentはパスにのみ必要であり、質問への回答の一部ではありません。
これは新しいRazorビュー構文を使用する必要があることを指摘してくれた@BrianLeggに感謝します。それに応じて例が更新されました。
単純化して呼んでください、しかし私はただします:
<a href="<%: Url.Action("ActionName", "ControllerName") %>">
<button>Button Text</button>
</a>
ハイパーリンクのハイライトを処理するだけです。私たちのユーザーはそれを愛しています:)
text-decoration:none
その愚かな下線を取り除くためのリンク(ホバーとアクティブ)。一部のブラウザではこれが必要です(Firefox 11.0は確実です)。
ブートストラップを使用すると、これは動的ボタンとして表示されるコントローラーアクションへのリンクを作成するための最も短くてクリーンな方法です。
<a href='@Url.Action("Action", "Controller")' class="btn btn-primary">Click Me</a>
または、HTMLヘルパーを使用するには:
@Html.ActionLink("Click Me", "Action", "Controller", new { @class = "btn btn-primary" })
単に:
<button onclick="@Url.Action("index", "Family", new {familyid = Model.FamilyID })">Cancel</button>
onclick
コンテンツをlocation.href
(so onclick="location.href='@Url.Action(....)'"
)で囲まないと、動作しませんでした。
遅い答えですが、これが私のActionLinkをボタンにする方法です。私たちのプロジェクトでは、便利になるようにBootstrapを使用しています。@Tは私たちが使用している唯一のトランスレータなので気にしないでください。
@Html.Actionlink("Some_button_text", "ActionMethod", "Controller", "Optional parameter", "html_code_you_want_to_apply_to_the_actionlink");
上記はこのようなリンクを提供し、それは以下の図のようになります:
localhost:XXXXX/Firms/AddAffiliation/F0500
私からしてみれば:
@using (Html.BeginForm())
{
<div class="section-header">
<div class="title">
@T("Admin.Users.Users")
</div>
<div class="addAffiliation">
<p />
@Html.ActionLink("" + @T("Admin.Users.AddAffiliation"), "AddAffiliation", "Firms", new { id = (string)@WorkContext.CurrentFirm.ExternalId }, new { @class="btn btn-primary" })
</div>
</div>
}
これが誰かを助けることを願っています
new { @class="btn btn-primary" })
+ one
リンクを使用したくない場合は、ボタンを使用してください。ボタンにも画像を追加できます:
<button type="button" onclick="location.href='@Url.Action("Create", "Company")'" >
Create New
<img alt="New" title="New" src="~/Images/Button/plus.png">
</button>
type = "button"は、フォームを送信する代わりにアクションを実行します。
でこれを行うことはできませんHtml.ActionLink
。Url.RouteUrl
URLを使用して、必要な要素を作成する必要があります。
<button onclick="location.href='@Url.Action("NewCustomer", "Customers")'">Checkout >></button>
さらに後の応答ですが、同様の問題に遭遇し、独自の画像リンクHtmlHelper拡張機能を作成してしまいました。
上記のリンクにある私のブログの実装を見つけることができます。
誰かが実装を探している場合に備えて追加されました。
独自の拡張メソッド
を作成できます私の実装を見てください
public static class HtmlHelperExtensions
{
public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt, object htmlAttributesForAnchor, object htmlAttributesForImage)
{
var url = new UrlHelper(html.ViewContext.RequestContext);
// build the <img> tag
var imgBuilder = new TagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));
imgBuilder.MergeAttribute("alt", alt);
imgBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributesForImage));
string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);
// build the <a> tag
var anchorBuilder = new TagBuilder("a");
anchorBuilder.MergeAttribute("href", action != null ? url.Action(action, routeValues) : "#");
anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
anchorBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributesForAnchor));
string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);
return MvcHtmlString.Create(anchorHtml);
}
}
次に、それをビューで使用して、私の通話を確認します
@Html.ActionImage(null, null, "../../Content/img/Button-Delete-icon.png", Resource_en.Delete,
new{//htmlAttributesForAnchor
href = "#",
data_toggle = "modal",
data_target = "#confirm-delete",
data_id = user.ID,
data_name = user.Name,
data_usertype = user.UserTypeID
}, new{ style = "margin-top: 24px"}//htmlAttributesForImage
)
@using (Html.BeginForm("DeleteMember", "Member", new { id = Model.MemberID }))
{
<input type="submit" value="Delete Member" onclick = "return confirm('Are you sure you want to delete the member?');" />
}
画像として表示されるリンクを作成する方法については多くの解決策があるようですが、ボタンのように見えるものはありません。
私がこれを行うには、良い方法しかありません。少しハックですが、動作します。
ボタンと別のアクションリンクを作成する必要があります。CSSを使用してアクションリンクを非表示にします。ボタンをクリックすると、アクションリンクのクリックイベントを発生させることができます。
<input type="button" value="Search" onclick="Search()" />
@Ajax.ActionLink("Search", "ActionName", null, new AjaxOptions {}, new { id = "SearchLink", style="display:none;" })
function Search(){
$("#SearchLink").click();
}
ボタンのように見える必要があるリンクを追加するたびにこれを行うのはお尻の痛みかもしれませんが、それは望ましい結果を達成します。
私が行った方法は、actionLinkと画像を別々にすることです。アクションリンク画像を非表示に設定してから、jQueryトリガー呼び出しを追加します。これはより回避策です。
'<%= Html.ActionLink("Button Name", "Index", null, new { @class="yourclassname" }) %>'
<img id="yourImage" src="myImage.jpg" />
トリガーの例:
$("#yourImage").click(function () {
$('.yourclassname').trigger('click');
});
これは私がスクリプトなしでそれをした方法です:
@using (Html.BeginForm("Action", "Controller", FormMethod.Get))
{
<button type="submit"
class="btn btn-default"
title="Action description">Button Label</button>
}
同じですが、パラメータと確認ダイアログがあります:
@using (Html.BeginForm("Action", "Controller",
new { paramName = paramValue },
FormMethod.Get,
new { onsubmit = "return confirm('Are you sure?');" }))
{
<button type="submit"
class="btn btn-default"
title="Action description">Button Label</button>
}