如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?
Posted
技术标签:
【中文标题】如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?【英文标题】:How to get a value of a function from a javascript file to an ASP.NET MVC view? 【发布时间】:2018-05-10 14:55:28 【问题描述】:我正在尝试将我的视图与 java 脚本分开,在我看来我调用 js 文件中的函数来创建图表,
这是我的js文件和函数:
function pieChartForInterventions(chartID,pieChartData)
chartID.kendoChart(
dataSource:
data: pieChartData
,
series: [
type: "pie",
field: "list",
categoryField: "mm",
padding: 0,
labels:
visible: true,
],
seriesClick:onDb,
tooltip:
visible: true,
template: "$ category "
,
legend:
position: "bottom"
);
function onDb(e)
var _clicked = e.category;
这是我的看法:
pieChartForInterventions($("#pieChart"), result);
现在的问题是,正如您在我的函数中看到的,我有一个 onDb() 函数,当我单击图表以获取我单击的值时调用该函数,我需要此值通过 Ajax 调用将其发送回通过我的观点,我应该如何在我的观点中拥有这个价值?
【问题讨论】:
你的意思是 我需要这个值通过我的视图通过 Ajax 调用将其发送回? @Shyju 在我的图表中,当我点击一个系列时,我得到它的值,然后我需要这个值将它发送回控制器,因为我将根据这个值创建另一个图表跨度> 于是进行ajax调用,用js初始化图表。 @Shyju 那边怎么用"@Url.Action("")?那我的观点就没有用了,我应该这样工作吗? 可以在视图中执行Url.Action,将生成的相对url通过js变量传递给你的外部js。见How do I make JS know about the application root?。另一种选择是将data
属性设置为您的身体并在javascript 中读取它。 ex <body data-myurl="@Url.Action("SecondChart")">
和 js var url = $("body").data("myurl"
)`
【参考方案1】:
请详细说明一下,您认为在哪里需要这个值?或者你想在视图中接收到这个值后做什么?
如果您在 javascript 中有可用的内容,则意味着您已经在“视图”中拥有它,因为您的 javascript 逻辑执行的唯一位置是在您的视图中。
通过您的 onDb(e) 函数,您可以:
1) 返回值并通过 javascript 逻辑在视图中任何您需要的地方使用它。
在您分离的 js 文件中,您可能有如下函数:
function onDb(e)
var _clicked = e.category;
return _clicked;
在您的视图 (.cshtml) 中的某处,您可能会执行以下操作:
<script type="text/javascript">
// Get 'e' from wherever you need
var requiredValue = onDb(e);
// Any Javascript / JQuery / Ajax logic ...
</script>
2)如果服务器端需要返回值,可以发送AJAX请求等。如何发送AJAX请求见下文(MVC jquery ajax call with input parameter)
==== 评论后更新====
您可以使用我在第二个代码 sn-p 中提到的相同方式访问 onDb 函数。但是,在这种情况下,获取输入参数“e”将需要一些脚本。
另外,在这种情况下更容易的是,您可以在 onDb(e) 函数中移动“Ajax 调用”。更新 onDb(e) 函数如下……
function onDb(e)
var _clicked = e.category;
$.ajax(
type: "POST",
url: '@Url.Action("ControllerName", "ActionName")',
contentType: "application/json; charset=utf-8",
data: valueToSend: _clicked ,
dataType: "json"
);
在您的服务器端,您将执行以下操作:
public class ControllerName : Controller
[HttpPost]
public ActionResult ActionName(string valueToSend)
//The value you needed is stored in the input paramater 'valueToSend'
//... process however you want and return any ActionResult ...
return Json("success", JsonRequestBehavior.AllowGet);
【讨论】:
onDb() 函数在我的 js 文件中,当我在图表上点击时,它被调用,..在我看来,我需要使用 onDb 函数值进行 ajax 调用,我不知道应该做什么我写的是为了得到这个值 我已根据您的评论更新了我的答案,请重新阅读。谢谢! 这是一种合乎逻辑的方式吗?在我的 js 文件中使用 ajax?还是应该保留 ajax? 理想情况下,所有特定于视图的逻辑都应保留在视图中。从技术角度来看是一样的,但从可维护性的角度来看,它可能会造成麻烦。就像我之前多次建议的那样,您应该采用方法 1。 你 1 方法,你说我应该在 cshtml 中说 var result=onDb(e) ,但这会引发错误,因为当我运行时,首先我的视图将被加载并说 e 不被拒绝,因为它尝试在创建图表之前调用 onDb以上是关于如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 python 代码中获取值到 YAML 文件中
如何从 CoreData-Entities 获取一些值到代码中
从 sql server 获取选定的值到 php 中的下拉列表