5

ビュー ページからコントローラー メソッドを呼び出す必要があります。以下のリンクをクリックすると、メソッドが呼び出されます。

@Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", 
                 new { item.InvoiceNumber }, new { target = "_blank" })

メソッドのシグネチャは次のとおりです。

public void SendPdfStatement(string InvoiceNumber)
    {

        InvoiceNumber = InvoiceNumber.Trim();

        ObjectParameter[] parameters = new ObjectParameter[1];
        parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

        List<Models.Statement> list = new List<Models.Statement>();
        list = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();

        var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
        Models.Statement statement = statementResult.SingleOrDefault();

        pdfStatementController.WriteInTemplate(statement);                                 

   }

問題は、リンクをクリックすると空白のウィンドウが開くことです。私はそれが何かであることを知っていnew { target = "_blank" }ます。その場所に渡すnullと、リンクのあるページが空白になります。マイページがそのまま残り、新しい空白のウィンドウも表示されないようにするには、ここに何を渡しますか。

4

6 に答える 6

6

これを試して

<%=Html.ActionLink(a.Title, "View", "Report", new { Id = a.id.ToString() }, new { target="_blank" })%> 
于 2013-08-04T05:47:23.217 に答える
2

コントローラーのアクションを変更します。何も返さないため、表示されるページは空白です。行う

 public ActionResult SendPdfStatement(string InvoiceNumber)

    {
    InvoiceNumber = InvoiceNumber.Trim();

        ObjectParameter[] parameters = new ObjectParameter[1];
        parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

        List<Models.Statement> list = new List<Models.Statement>();
        list = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters).ToList<Models.Statement>();

        var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
        Models.Statement statement = statementResult.SingleOrDefault();

        pdfStatementController.WriteInTemplate(statement); 

    return View();
    }

編集:または、ページがリロードされず、メソッドから何も返す必要がないように、AJAX を使用する必要があります。ここhttp://www.asp.net/mvc/overview/older-versions-1/contact-manager/iteration-7-add-ajax-functionality-csを読んでください。

于 2011-12-13T20:21:31.557 に答える
1
<input type="button" class="btn btn-primary" value="Text" onclick="window.open('@Url.Action("Action", "Controller")',target='_blank');return false;"/>         

 <button type="button" class="goBtn btn btn-primary btn-mid" onclick="window.open('@Url.Action("CheckInReport", "Staff")', target='_blank')" id="CheckIn">Check In</button>

これはMVC5でも機能します

于 2013-09-27T11:07:22.387 に答える
0

初めに

TARGET = "_blank"

ハイパーリファレンスされたリソースを新しいブラウザウィンドウで開くために使用されるので、新しいウィンドウが必要ない場合は、なぜそれを配置するのでしょうか。:-)

次に、ActionLinkヘルパーメソッド(以下で参照されている質問から取得した説明)を見てください。

         Html.ActionLink(article.Title, 
            "Item",   // <-- ActionMethod
            "Login",  // <-- Controller Name.
            new { article.ArticleID }, // <-- Route arguments.
            null  // <-- htmlArguments .. which are none. You need this value
                  //     otherwise you call the WRONG method ...
                  //     (refer to comments, below).
            )

HTML.ActionLinkメソッドを見てください

エラーが発生した場合、間違ったメソッドのオーバーロードが発生していると思います。htmlArgumentsをnullに置き換えると、問題はありませんが、メソッドがVOID(nothing)を返すと、空のページが表示されます(他に何を期待しますか:)?)。

デフォルトのナビゲーションメカニズムをキャンセルするには、単純なjqueryルールを実装できます。

$('a.invoicelinkclass').click(function(e){
    e.preventDefault();
    $.get($(this).attr('href'),function(){
       // maybe an alert() or jquery ui .dialog() to let user know that something happened ?
    });
 });
于 2011-12-13T20:25:38.180 に答える
0

_selfの代わりに_blank 渡すか、代わりに渡してみてくださいnullnew { target = "_blank" }

すなわち @Html.ActionLink(item.InvoiceNumber, "SendPdfStatement", "Invoice", new { item.InvoiceNumber }, null )

new { target = "_blank" }またはすべてを一緒に残す

于 2011-12-13T20:07:02.517 に答える