2011-12-13 12 views
1

私はあなたがそのようなのようなPostパラメータを渡すことができ、誰もがHtml.ActionLinkのためのMVC拡張を書いたかどうかをチェックしています:投稿機能付きMVC Html.ActionLink?

<% Html.ActionLink("Click me", "Index", "Home", new { MyRouteValue = "123" }, null, new { postParam1 = "a", postParam2 = "b" }); %> 
通常のようなリンクをレンダリングするでしょう

が、提出onClickイベントを持ちます私は潜在的に多い様々なページにユーザーをリダイレクトしているよ

<a href="#" onClick="$('#theform').submit(); return false;">Click me</a> 
<form id="theform" action="/Home/Index/123" method="post"> 
    <input type="hidden" name="postParam1" value="a"> 
    <input type="hidden" name="postParam2" value="b"> 
</form> 

:また、のようなポストパラメーターからの追加の非表示の入力を持つアクション、コントローラ、およびルート値に対するアクションURLでフォームをレンダリングデータ。ページ間だけでなく、電子メールからページへも。これは非常に再利用可能で、たくさんのコードを整理すると思いますが、すでにそこに浮かんでいる場合は、これを書く時間を節約できます。私は車輪を作り直すことが嫌いです。

+1

あなたもJavaScriptを実行できます電子メールの中から? – danludwig

+1

なぜPOSTでそれを行う必要がありますか?私はここで非常に多くの合併症を参照してください...あなたは簡単にハッシュでそれらをマスクし、コントローラ側のデータベースから取得することができますGETパラメータを非表示にしたい場合... – torm

答えて

2

ActionLinkは<a>を作成するためのものです。あなたが求めているのは、それがすでに形の中に入っていれば爆破するだろう。そうでなければ、フォームの中に送信ボタンをリンクさせ、javascriptを使わない方がよい(JavaScriptと電子メールはうまくいかない)。

フォームを作成し、それをDOMの最後に付けることができます。これは、部分的なビューまたはjavascriptを介して行うことができます。

正直、私はあなたがPOSTを使用しないことをお勧めします。大部分のデータを保持し、そのデータを取得するために必要なIDを持っているだけの場合、アクションリンクにあまりにも多くのデータを渡す必要はありません。

+1

基本的にあなたが言っていることは、電子メールの受信者にカスタマイズされたページを開き、下部に「送信」ボタンが表示されていますか? –

+0

これは、または、より好ましくは、POSTで送信するすべてのデータを取得する場所をサーバーに知らせるリンクのデータベースIDを持つActionLinkです。 –

+4

リンクはGETリクエストであることに注意してください。 GETリクエストは、Database内の何かを変更すべきではありません。 – Romias

1

Ajax.ActionLinkは、投稿要求に対して完全に正常に機能します。ページを更新するには、ページを更新する関数(例:function reload(){ windows.location.reload();})を作成します。 これはこのように見えます。

@Ajax.ActionLink("DiaplyName", "Action", new { parameters to post }, new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnComplete="reload();"}) 

注:ajaxまたはjQueryコードを使用するには、適切なスクリプトを参照する必要があります。

0

コードのこの作品は、私のために有用だったと私の一日を保存した..私はそれを改善し、それが偽装ユーザーのための私を助けた...ここで私は何をしたか、怒鳴る..です

<% if (Session["SessionUserImpersonate"] != null && Session["SessionUserImpersonate"] != "" && Session["SessionUserImpersonate"] == "Yes") 
    { 
     BLL.Models.User userold = new BLL.Models.User(); 
     userold = (BLL.Models.User)Session["SessionUserOld"];  
     %> 
    <span class="FL">(Impersonated as <%=Website.Backoffice.SessionHelper.Session_User.UserName != null ? Website.Backoffice.SessionHelper.Session_User.UserName:"" %> , </span> 

    <form class="FL" id='frmid' action="/Index/Login?username=<%=userold.UserName%>&password=<%=userold.Password%>&IsImpersonate=No" method="post"> 
       <a class="TxtRed" style="cursor:pointer;" onclick="$('#frmid').submit(); return false;" > - finish impersonated session </a> 
       </form> 
       ) &nbsp;&nbsp; 
    <%} %> 
関連する問題