【问题标题】:How to get a value of a function from a javascript file to an ASP.NET MVC view?如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?
【发布时间】: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")`

标签: javascript asp.net-mvc view


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-13
  • 2011-03-03
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2017-03-13
相关资源
最近更新 更多