2017-11-29 9 views
0

ドロップダウンを選択すると、ドロップダウンの値がコントローラーのアクションメソッドに表示されません。選択した値は、Ajaxで結合が、あなたが直接あなたが合格しなければならない代わりに、AJAX呼び出しに値を渡しているコントローラのアクションメソッドで see our pageコントローラーデータの受け渡し

<div class="row"> 
    <div class="col-lg-3"> 
    <fieldset class="form-group"> 
     <label class="form-label semibold control-label">Generic</label> 
     @Html.DropDownList("MasterGenericID", null, "--- Select Generic ---", new { @class = "select2-arrow" }) 
    </fieldset> 
    </div> 
$('#btnsearch').click(function() { 
    var genericID = $('#MasterGenericID').val(); 
    $.ajax({ 
    type: 'POST', 
    url: "@Url.Action("ProductMasterController", "ProductMasterview")", 
    data: JSON.stringify(GenericID), 
    contentType: "application/json", 
    dataType: 'json', 
    success: function(data) { 
     // if (response.id > 0) 
     alert("test" + data.GenericID); 
    }, 
    async: true // make it true if you want to make an async call. 
    }); 
}); 
public ActionResult ProductMasterview(string GenericID) 
    if (Convert.ToInt32(GenericID) > 0) 
    { 
    return View(dPMSP.GetAllProductsUsingGenericID(GenericID)); 
    } 
    else 
    { 
    Generic_Bind(); 
    Therapeutic_Bind(); 
    SubTherapeutic_Bind(); 
    Formulation_Bind(); 
    return View(dPMSP.GetAllProducts()); 
    } 
} 

Error page

おかげ

+0

アクション定義に '{' –

答えて

0

のようになります。

はこのラインで

data: JSON.stringify(GenericID), 

を見てみましょうあなたは、変数GenericIDを使用しているが、それはどこにも定義されていません。 JavaScriptが大文字と小文字を区別するを忘れないでください。正しいケースを使用していることを確認してください。

は今、あなたは間違ってUrl.Actionヘルパーメソッドを使用している

url: '@Url.Action("ProductMasterController", "ProductMasterview")', 

この行を見てみましょう。 2つのパラメータを取るオーバーロードを使用している場合、最初のパラメータはアクション名で、2番目のパラメータはコントローラ名でなければなりません。また、接尾辞Controllerは必要ありません。だから、

url: "@Url.Action("ProductMasterview", "ProductMaster")", 

iは、あなたがjsonとしてあなたのAJAX呼び出しのデータ型プロパティを指定されて気づいた別の問題のようなものでなければなりません。 $.ajaxメソッドは、このプロパティ値を使用して、サーバーからのデータを解析します。ここでは、サーバーからのJSON応答を期待していることを$.ajaxに伝えています。しかし、あなたのアクションメソッドはJSONではなくHTML/Plainテキストであるビュー結果を返しています。したがって、あなたのコードは期待どおりに動作しません。

あなたはPOST呼び出しを行っていますが、あなたのアクションメソッドはHttpPost属性で装飾されていません。したがって、あなたのAjaxコールはアクションメソッドにヒットしません。また、あなたが返そうとしているデータのタイプ(JSON /結果の表示-HTML)については、ご質問からは不明です。

ビューの結果(HTMLマークアップ)を返す場合は、部分ビューの結果を返して、DOMの一部を更新できるようにする必要があります。 ビュー全体を返す場合は、Ajax呼び出しを行うことに意味がありません(アクションメソッドコードのelse部分で4つのメソッド呼び出しを参照していると感じています)。

正しいデータ型も使用してください。数値を渡す場合は、数値型(intまたはlong)を使用してください。stringをparamとして使用し、後で変換を行います。 Convert.ToInt32は、渡す値をint(例:12abc)に安全に変換できない場合に例外をスローすることがあります。

パラメータタイプとしてintを使用してください。

public ActionResult ProductMasterview(int genericId) 
{ 
    // some other logic you want to do . 
    return PartialView(dPMSP.GetAllProductsUsingGenericID(genericId)); 
} 

GetAllProductsUsingGenericIDメソッドも、文字列ではなくint型を使用するように更新する必要があります。

クライアント側では、選択したオプション値をdataプロパティに渡すことができます。あなたのアクションメソッドはHttpPost属性で装飾されていないので、単にGET($.ajaxのデフォルトタイプ)を使用してください。また、選択されたオプション値を、アクションメソッドのパラメータ名と一致するキーを持つjsオブジェクトに送信します。

$('#btnsearch').click(function() { 
    var id = $('#MasterGenericID').val(); 
    $.ajax({ 
     url: "@Url.Action("ProductMasterview", "ProductMaster")", 
     data: { genericId: id } 
    }).done(function(response) { 
     console.log('Received response from server'); 
     console.log(response); 
     // If you want to update the DOM with the response 
     // Ex : $("#SomeDomElementId").html(response); 
    }).fail(function(x, a, e) { 
     alert(e); 
    }); 
}); 

アクションメソッドからJSONを返す場合は問題ありません。 dataTypeプロパティを必ず指定する必要はありません.jQueryは応答ヘッダーに基づいてインテリジェントに推測しようとします。

+0

ありがとうその作業#shyju –

+0

genericIDはコントローラーアクションメソッドに入っていますが、同時に2つの操作を実行します。 –

0

をバインドされていませんGenericIDプロパティを持つオブジェクト

例 -

$('#btnsearch').click(function() { 
    var value = $('#MasterGenericID').val(); 

    var data = { 
     GenericID: value 
    }; 

    $.ajax({ 
     type: 'POST', 
     url: "@Url.Action("ProductMasterview", "ProductMaster")", 
     data: JSON.stringify(data), 
     contentType: "application/json", 
     dataType: 'json', 
     success: function(data) { 
      // if (response.id > 0) 
      alert("test" + data.GenericID); 
     }, 
     async: true // make it true if you want to make an async call. 
    }); 
}); 
+0

がありません。 'data:data'を使用して' contentType'オプションを削除するだけで、 'JSON.stringify()'を使う必要はありません。しかし、このメソッドはhtmlを返すので、例外はスローされます。json = 'dataType'オプションを削除するか、' dataType: 'html''を指定します(デフォルトでは 'async'は' true'です) –

+0

ありがとうsurya有効な応答 –

0

jsが

$('#btnsearch').click(function() { 
    var genericID = $('#MasterGenericID').val(); 
    var postData={ 
       GenericID:genericID 
       }; 
    $.ajax({ 
    type: 'POST', 
    url: '@Url.Action("ProductMasterController", "ProductMasterview")', 
    data: postData, 
    dataType: 'json', 
    success: function(data) { 
     // if (response.id > 0) 
     alert("test" + data.GenericID); 
    }, 
error: function(xhr, ajaxOptions, thrownError) { 
            alert('Failed to delete'); 
           } 
    }); 
}); 

ようにすべきであり、C#のコードは、あなたのコードは問題の束を持っている

[HttpPost] 
public ActionResult ProductMasterview(string GenericID) 
{ 
    if (Convert.ToInt32(GenericID) > 0) 
    { 

    //return View(dPMSP.GetAllProductsUsingGenericID(GenericID)); 
    //you can return only the genericId as you expect it at ajax success 
    return Json(new { GenericID = yourGenericId}); 
    } 
    else 
    { 
    Generic_Bind(); 
    Therapeutic_Bind(); 
    SubTherapeutic_Bind(); 
    Formulation_Bind(); 
    //return View(dPMSP.GetAllProducts()); 
    //you can return only the genericId as you expect it at ajax success 

    return Json(new { GenericID = yourGenericId}); 
    } 
} 
関連する問題