3

OK、すべてが私が達成しようとしていることで「機能的に」機能しています。もう一度言いますが、これはばかげていると確信していますが、これを行う方法がわかりません。

エンティティの編集フォームがあります。たとえば、車です。この「車」には 0 ~ 多くの乗客が乗れます。したがって、編集フォームには、車のすべてのフィールドがあり、各乗客 (部分的) を示すリスト ビューがあります。また、乗客を入力できる新しい部分ビューをレンダリングする「新しい乗客を追加」ボタンもあります。これには、キャンセル リンクと、Ajax フォームを送信するための追加ボタンがあります。乗客を追加すると、乗客は自動的にリストに追加されますが、乗客の入力フォームを消す必要があります。onSuccess および onComplete 関数を使用して、フォームが含まれる div を非表示にしようとしましたが、どちらも部分ビュー HTML 要素 (白い画面、テキスト) のみをレンダリングし、ページ全体のコンテキストで partialView をレンダリングしません。

ソース: 1) メイン編集ビュー

    <script type="text/javascript">
    Function hideForm(){
        document.getElementById('newPassenger').style.display = 'none';
    }

</script>
<h2>Edit</h2>

<%-- The following line works around an ASP.NET compiler warning --%>
<%= ""%>

<%Html.RenderPartial("EditCar", Model)%>
<h2>Passengers for this car</h2>
<%=Ajax.ActionLink("Add New Passenger", "AddPassenger", New With {.ID = Model.carID}, New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%>
<div id="newPassenger"></div>
<div id="passengerList">
    <%Html.RenderPartial("passengerList", Model.Passengers)%>
</div>
<div>
    <%= Html.ActionLink("Back to List", "Index") %>
</div>

2) 乗客ビューを追加します。以下のキャンセル リンクは、何も返さないアクションであるため、div 内の情報が削除されます。

<%  Using Ajax.BeginForm("AddPassengerToCar", New With {.id = ViewData("carID")}, New AjaxOptions With {.OnSuccess = "hideForm()", .UpdateTargetId = "passengerList", .InsertionMode = InsertionMode.Replace})%>   
    <%=Html.DropDownList("Passengers")%> 
    <input type="submit" value="Add" />
    <%=Ajax.ActionLink("Cancel", "CancelAddControl", _
                                            New AjaxOptions With {.UpdateTargetId = "newPassenger", .InsertionMode = InsertionMode.Replace})%><% end using %>
4

2 に答える 2

2

わかりました-これを理解しました。昨夜は遅すぎたと思います。これが答えです。実際には、いくつかの小さな問題が 1 つにまとめられたことが判明しました。

  1. javascript の関数 hideForm() は関数 hideForm() である必要があり、大文字は使用できません。コントローラー関数の作成に慣れすぎていると思います。
  2. 「hideForm」ではなく、OnSuccess 属性で「hideForm()」を使用していました。
  3. 新しいパッセンジャーの追加リンクを再度クリックしても、div は表示されないため、div を非表示にしたくない場合があります。hideForm 関数を変更して、div の innerHTML プロパティを '' に設定しました。

ご協力いただきありがとうございます。

于 2010-03-28T15:11:38.890 に答える
1

MicrosoftAjax.jsページでとスクリプトの両方を参照していることを確認しMicrosoftMvcAjax.jsてください。部分的なビュー コンテンツ (白い画面、テキスト) を取得する理由は、ajax が正しく実行されないスクリプト エラーである可能性があります。実行中にエラーが発生した場合は、 FireBugを参照してください。

フォームの非表示に関する限り、OnSuccessコールバックを使用できます。

<% Using Ajax.BeginForm("AddPassengerToCar", 
    New With { .id = ViewData("carID")}, 
    New AjaxOptions With {
        .UpdateTargetId = "passengerList", 
        .InsertionMode = InsertionMode.Replace,
        .OnSuccess = "hideForm"
}) %>

AJAX 呼び出しが成功すると、hideFormjavascript 関数が実行され、目的の div が非表示になります。

于 2010-03-28T07:03:44.950 に答える