我需要帮助。我有MVC应用程序在。net core 2.2。我有一个视图的形式,有一个输入(类型文本)与事件的onfocusout在javascript。
在这个js方法onfocusout中,我获得输入值,并使用c#代码从另一个应用程序调用API,并将结果设置为ViewBag或ViewData,在js中,我没有问题继续执行此结果,但是当我调用API时,我需要输入值,但我无法从输入或从js方法中获得c#代码中的输入值。
有什么解决办法吗?
代码如下:
.
.
.
<input type="text" id="input" onfocusout="OnFocusOut(this)" />
<script>
function OnFocusOut(input) {
var value = input.value;
@ViewBag.Value = value; //not work
@{
//C# code to call API, here I need input value
@ViewBag.Result = result;
}
alert('@ViewBag.Result'); //no problem
}
</script>
.
.
.
.
你可能误解了ViewBag的工作原理。
当你的浏览器获得页面时,你的ViewBag
基本上已经超出作用域。这是因为您的MVC应用程序使用ViewBag
,但Javascript只在web浏览器文档中具有作用域(这是HTML代码,由应用程序返回到浏览器,之后ViewBag
已经超出了作用域。Javascript不是MVC应用程序的一部分,只是生成的网页。
为方便理解:
当应用程序运行时,假设您的ViewBag.Value
具有值"aa", cshtml文件中的以下代码:
function OnFocusOut(input) {
var value = input.value;
@ViewBag.Value = value;
}
将被发送到浏览器作为:
function OnFocusOut(input) {
var value = input.value;
"aa" = value;
}
因为你的浏览器只看到最后一部分,它在Javascript中是没有意义的。在你的情况下,会导致语法错误。