2017-01-14 7 views
0

可変形式のjavascriptをアクション結果に渡そうとしていますが、エラーは表示されませんが、どちらも動作しません。javascriptから値を操作結果に渡す

私は、ユーザーがアイテムを選択すると、選択したアイテムをアクション結果に渡す必要があるというJavaScriptがあります。

.on('select_node.jstree', function (e, data) { 
//alert('You selected node: ' + data.node.text); 
url.actionURL("/SinqLaison/UpdateItemData", data.node.text); 
$.ajax({ 
    url: '@Url.Action("UpdateItemData", "SinqLaison")', 
    type: 'POST', 
    data: { query: data.node.text } 
}); 

私は

public ActionResult UpdateItemData(string query) 
    { 
     List<MarketItem> items = new List<MarketItem>(); 

     SqlConnection connection = new SqlConnection(); 
     connection.ConnectionString = connString; 
     SqlCommand sqlCom = new SqlCommand("SELECT * FROM Items where Id =" + query , connection); 
     connection.Open(); 
     SqlDataReader reader = sqlCom.ExecuteReader(); 
     while (reader.Read()) 
     { 
      var item = new MarketItem() 
      { 
       id = Convert.ToInt32(reader["Id"]), 
       name = reader["Name"].ToString(), 
       marketParentGroup = Convert.ToInt32(reader["MarketGroup"] == DBNull.Value ? 0 : Convert.ToInt32(reader["MarketGroup"])), 
       icon = reader["Icon"].ToString() 
      }; 
      items.Add(item); 
     } 
     connection.Close(); 

     return View(); 

であるために、クエリを渡すためにしようとしているアクションの結果、私はFireFoxのデバッガでは、次の404エラーが発生します。私はアクションとコントローラが正しいと確信しています。私のJavaScriptのsysntaxが間違っていますか?

enter image description here

+0

のようにアクセスすることができます。なぜそれは起こっていないと思いますか? jsコードの実行を妨げているページにjsエラーがありますか?また、Sql Injection攻撃についても読んでください! – Shyju

+0

こんにちはShyju、私はそれがヒットしているが、ブレークポイントが解雇されていないかどうかを確認するためにアクション結果にブレークポイントを設定し、私は通常、 –

+0

他にjsエラーがありますか? 'on'イベントが呼び出されていますか? – Shyju

答えて

1

スクリーンショットから、あなたのコードが外部のJavaScriptファイルの内部に配置されているように、それは見えます。 @Url.ActionヘルパーメソッドはC#メソッドであり、サーバーが実行するファイルに配置する必要があります。ビューファイルは、このための場所です。サーバーはjavascriptファイルに配置されたC#メソッド呼び出しを実行できません。

ビュー内でUrl.Actionメソッドを実行し、それを外部jsファイルに渡す必要があります。

ビューファイルでUrl.Actionヘルパーメソッドを実行し、その値(相対URL)をjavascript変数に格納します。あなたはあなたのajax呼び出しを持っているスクリプトをロードする前にこれをしていることを確認する必要があります。また、悪意のあるグローバル変数の上書きを避けるために、javascriptの名前空間を使用するようにしてください。あなたの外部のJavaScriptファイルで今

<script> 
    var myProj = myProj || {}; 
    myProj.urls = myProj.urls || {}; 
    myProj.urls.updateItemDataUrl='@Url.Action("UpdateItemData", "Home")';  
</script> 
<script src="~/Scripts/MyExternalJsFileWhichHasAjaxCode.js"></script> 

、あなたはあなたのコードはアクションメソッドにdata.node.text` `のどのような値を渡す必要があり

$.ajax({ 
    url: myProj.urls.updateItemDataUrl, 
    type: 'POST', 
    data: { query: 'myTest' } 
}); 
+1

ありがとうShyjuは完璧に動作します。 –

関連する問題