0

私は ASP.NET MVC4 アプリケーションを開発しており、jQuery アクションリンクの使用を開始しました。ただし、次の Razor コードを実行すると (チケットの表示アクションリンクをクリックすると)、空の文字列が getElementById() に渡されたことを示す一般的な jQuery エラーが (2 回) 表示されます。firefox は単に jQuery コードにリンクしているだけなので、このエラーがどこで発生しているのかわかりません。これは私の Razor コードです: (js 関数の show と hideticket が空であることは知っていますが、それはコードを単純化するためです):

<script>
function ShowTicket(id) {
    $("#viewTicketButton" + id).hide();
    $("#hideTicketButton" + id).show();
    $("#viewTicket").show();
}

function HideTicket(id) {
    $("#viewTicketButton" + id).show();
    $("#hideTicketButton" + id).hide();
    $("#viewTicket").hide();
}
</script>

<h3>Your tickets</h3>
<table border="1">
    <tr>
        <td>Title:</td>
        <td>Urgency:</td>
        <td>Status:</td>
    </tr>
    @foreach (SupportTicketViewData t in Model.supportTicketViewDataList)
    {
        <tr>
            <td>@t.title</td>
            <td>@t.text</td>
            <td>@t.status</td>
            <td>@Ajax.ActionLink("View Ticket", "ViewTicket", new { id = t.id },
            new AjaxOptions
            {
                HttpMethod = "GET",
                InsertionMode = InsertionMode.Replace,
                UpdateTargetId = "viewTicket",
                OnComplete = "ShowTicket(" + t.id +");"
            }, new { id = "viewTicket" + t.id })</td>
            <td><button  id="@Html.Raw("HideTicket" + t.id)" onclick="HideTicket(@t.id);">Hide Ticket</button></td>
        </tr>
    }
</table>

<div id="viewTicket">
</div>

また、GET リクエストの結果は div 要素に挿入されるため問題なく取得できますが、Firefox でデバッグすると 2 つのエラーが発生します。

また、viewTicketButton をクリックしても、ボタンが非表示になりません。

4

3 に答える 3

5

目立たない検証をオンにして、Ajax.BeginForm または Ajax.ActionLink を介して作成されたフォームを送信すると、「getElementById() に渡された空の文字列」という警告が発生します。
私の場合、Ajax.BeginForm でサポートされているすべてのイベントにハンドラーを追加すると、警告に関する問題が修正されました。

@using (Ajax.BeginForm(“SomeAction”, null, new AjaxOptions() {
  OnBegin = “someFunction”,  
  OnComplete = “ShowTicket”,  
  OnFailure = “someFunction”,  
  OnSuccess = “someFunction”  
} 
....

これで問題が解決すると思います。
問題の詳細については、ブログ投稿を参照してください。

于 2013-11-09T20:48:10.277 に答える
0

私はあなたが単純にできないと信じています

OnComplete = "ShowTicket(" + t.id +");"

引数は JavaScript 関数でなければなりません。呼び出したいものがパラメーターなしの場合は、次のことができます

OnComplete = "ShowTicket"

show ticket は関数オブジェクトなので、これで問題ありません。ただし、あなたの場合は、ID を ShowTicket に渡す必要があります。次のことを試してください。

OnComplete = "function() { ShowTicket(" + t.id +"); }"
于 2013-07-30T13:21:37.720 に答える
0

id タグで必要な二重引用符を補うために、おそらくスラッシュを追加する必要があります。

Html.Raw("id=\"SomeIdString\"")

于 2013-07-30T13:33:24.303 に答える