2

そのため、名前、電話番号、電子メールなどの顧客に関する情報を含むテーブルがあります。このテーブルから顧客を選択するためのラジオ ボタンを持つようにテーブルを設定しました。このラジオボタンは、コントローラー メソッドから顧客の名前を取得する jQuery 関数を呼び出します。特定の顧客のイベントのビューを返す CustomerEvent コントローラーに CustomerID と CustomerName の両方を渡すための適切かつ最良の方法を探しています。AJAX POST を使用しようとすると、ビューが返されませんdata。window.location も試しましたが、どちらも機能しません。

かみそりのコードは次のとおりです。

@Html.ActionLink("Events ", "../CustomerEvent/Index", null, new { id = "btnEventsCustomerID" })

jQuery:

jQuery('input[type=radio]').change(function () {
        jQuery('#hdnCustomerID').val($(this).val());            
        var CustomerID = jQuery('#hdnCustomerID').val();
        var CustomerName = null;
        $.ajax({
            url: '/Customer/GetCustomerName',
            data: { id: CustomerID },
            type: "GET",
            async: false,
            cache: false,
            success: function (data) {
                CustomerName = data
            }
        });
        alert(CustomerName);
        jQuery('#btnEventsCustomerID').click(function () {
            window.location = "/CustomerEvent/Index/?CustomerID=" + CustomerID + "&CustomerName=" + CustomerName;             
        });

CustomerName アラートは正常に機能しています。Customer イベントのビューを返すためのコントローラー メソッドを次に示します。

public ActionResult Index(int CustomerID = 0, string CustomerName="")
    {            
        if (CustomerID != 0)
        {                
            Session["CustomerID"] = CustomerID;               
            Customer CustomerObj = _customer.GetCustomer(CustomerID);
            Session["CustomerName"] = CustomerObj.FirstName + " "+ CustomerObj.LastName;
        }
        return View(_customerEvent.GetCustomerEventCustomList(CustomerID));            
    } 
4

2 に答える 2

1

なぜ CustomerName を送信するのですか? IDをキーオフしてCustomerObjで顧客の詳細(名前を含む)を取得するため、コントローラーメソッドで使用していないようです。できれば単純化し、それを取り除いてください...

同じリンクから同じコントローラ メソッドを呼び出すには、効果的に 2 つの方法があります。1 つは現在メソッドに null を渡すアクション リンクで、もう 1 つはメソッド パラメータを実際に渡そうとする jQuery の .click() オーバーライドです。つまり、両方が頭を突き合わせています

アクションリンクを使用しているため、実際にルート値を渡し(元々nullがあった場所)、そのように変更すると、うまくいくはずです(効果的にユーザーを新しいビューに移動しているように見えるため、jQueryクリックオーバーライドを取り除きます) :

    @Html.ActionLink("Events ", "../CustomerEvent/Index", 
         new{CustomerID = model.CustomerID}, new { id = "btnEventsCustomerID" })

model.CustomerIDただし、ビューでモデルデータを参照している場合に相対的に変更するだけです

于 2013-08-02T17:27:19.840 に答える