我正在尝试将变量形式的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错了吗?
答案 0 :(得分:1)
从屏幕截图中看,您的代码看起来像是放在外部javascript文件中。 @Url.Action
辅助方法是一种C#方法,需要放在服务器执行的文件中。视图文件就是这个地方。服务器无法执行放置在javascript文件中的C#方法调用。
您需要在视图中执行Url.Action
方法并将其传递给外部js文件。
因此,在您的视图文件中,执行Url.Action
辅助方法并将该值(相对URL)存储到javascript变量中。在加载具有ajax调用的脚本之前,您需要确保执行此操作。还要确保使用javascript命名空间来避免覆盖邪恶的全局变量。
<script>
var myProj = myProj || {};
myProj.urls = myProj.urls || {};
myProj.urls.updateItemDataUrl='@Url.Action("UpdateItemData", "Home")';
</script>
<script src="~/Scripts/MyExternalJsFileWhichHasAjaxCode.js"></script>
现在在您的外部JavaScript文件中,您可以像
一样访问它$.ajax({
url: myProj.urls.updateItemDataUrl,
type: 'POST',
data: { query: 'myTest' }
});