asp.net Core 2.2 MVC Pass参数来自js/html



我需要帮助。我有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中是没有意义的。在你的情况下,会导致语法错误。

最新更新