2009-05-18 17 views
10

ASP.NET MVCビューページにいくつかのASP LinkBut​​tonをインスタンス化する必要があります。私はいくつかのことを試してきました、そして、私はそれらを右に出させることができません。コードの相続人は私の最も最近の化身: のaspxファイル、それがFirefoxでレンダリング何ASP.NET MVCのLinkBut​​ton

<body> 
<% using (Html.BeginForm("TitleDetail", "Movies", FormMethod.Post, new{runat="server"})) { %> 

    <ul> 
    <% foreach (var disc in Model.Title.tblDiscs) %> 
    <% { %> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 
    <% } %> 
    </ul> 
<% } %> 
</body> 

は私が列挙していますコレクションの各メンバーのためのテキストリンクの1つのインスタンスであるが、彼らは、ハイパーリンクをアレント、テキストのみ。 生成されたHTMLは、私は、各ASPににrunat =「サーバー」attribuiteを追加しようとしました。この

<form action="/MyMovies/TitleDetail/239" method="post" runat="server">test title <br /> 

    <ul> 
     <li> 

      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 
     </li> 

     <li> 
      <asp:LinkButton ID="Play">Link</asp:LinkButton> 

     </li> 

    </ul> 

次のようになります。LinkBut​​tonのタグが、私は唯一の内側に置くことができる制御ランタイム例外を取得しますrunat = "server"属性を持つフォームタグ。それは私がすでにやったと思うので、私はそれを本当に理解していません。私が間違ってやっていることを誰にでも教えてもらえますか?LinkBut​​tonsが実際にリンジーになるように修正する必要がありますか?

答えて

7

ASP.NET MVCを使用すると、Html.ActionLink(...)ヘルパーメソッド(など)を使用する必要があります。彼らはLinkBut​​tonsよりもはるかに豊富な機能を提供します。

2

残念ながら、ASP.NET MVCは現在、Webフォームコントロールをサポートしていません。ごめんなさい! :(あなたは、標準のHTMLリンクを使用する必要があります

+12

。 :) – BobbyShaftoe

+1

@BobbyShaftoe、何に基づいて良いこと?通常、サーバーの状態を変更するものはPOST動詞を使用する必要があります.GETはデータを取得するためにのみ使用する必要があります(W3Cの推奨事項であり、セキュリティのためのものです)。美容上の理由から、ボタンを使用することは常に可能ではないので、LinkBut​​tonが必要です。 –

15

?私の推測では、あなたがそれを使用してフォームを送信するためにLinkBut​​tonコントロールを使用したいということですその場合は、私は似たような行っている、それはこのようなものです:

<% using (Html.BeginForm("TitleDetail", "Movies", 
    FormMethod.Post, new{ id = "MyForm", name = "MyForm" })) { %>  
<ul> 
    <% foreach (var disc in Model.Title.tblDiscs) { %> 
     <li> 
      <a class="do-something-link" href="javascript:void(0);">Click</a> 
     </li> 
    <% } %> 
</ul> 
<% } %> 

が続いて扱うjQueryを経由して提出:

$(document).ready(function(){ 
    $("a.do-something-link").click(function(ev) { 
     ev.preventDefault(); 
     $("#MyForm").submit(); 
    }); 
}); 
2

多少の粗い拡張方法を書いた。 (それは私が必要なすべてのです)これを改善するためにお気軽に:

public static IHtmlString ActionButton(this UrlHelper urlHelper, string buttonText, 
    string actionName) 
{ 
    var html = string.Format("<input type=\"button\" value=\"{0}\" " + 
     "onclick=\"window.location = '{1}'\"/>", 
     buttonText, urlHelper.Action(actionName)); 

    return new HtmlString(html); 
} 

とビューでは、このようにそれを呼び出す:私はそれが実際にグッド・シング(TM)だと思う

@Url.ActionButton("Button Text", "ActionMethod") 
関連する問題