在Razor文件中使用c#代码和函数
本文关键字:代码 函数 Razor 文件 | 更新日期: 2023-09-27 18:01:29
我有一个使用剃刀函数的问题。我有一个实体存储的列表。我写了一个剧本,但是出了问题。我以前从来没有做过这个。我不擅长HTML或Jscript等。
<标题> 我的代码 @model IEnumerable<Contact>
<script>
var name = document.getElementById("nameBox").value;
function nameBoxOperations(name) {
@foreach (var names in @Model)
{
if (names.givenName == name)
{
//OPERATIONS
}
}
}
</script>
在这段代码中,我想检查输入,如果它已经存储在我的列表中。但我无法触及"名字"变量。如果我写@string name = document.getElementById("nameBox".value;"它会返回一个错误,我不知道。
标题>您可以尝试以下解决方案:
@model IEnumerable<Contact>
<script>
var name = document.getElementById("nameBox").value;
var collection = '@(Model.Select(x => x.givenName).Aggregate((a, b) => a + "," + b))'.split(',');
function nameBoxOperations(name) {
for(var i = 0; i < collection.length; i++)
if (collection[i] == name)
{
//OPERATIONS
}
}
</script>
获取页面时,Razor在服务器上运行。它的主要目的是生成页面内容:
@foreach (var names in @Model)
{
<p>User name: @name</p>
}
如果你检查抓取页面的网络结果,你会看到结果不包含任何Razor代码。这是因为Razor完全运行在服务器上,只有它的结果才会显示给客户端:
<p>User name: Bob</p>
<p>User name: Jimmy</p>
<p>User name: Glover</p>
没有剃刀到达客户端。
您似乎希望Razor代码作为Javascript的一部分在客户端运行。Razor不是一种客户端语言。因此,Razor将无法评估客户端javascript参数name
。从Razor的角度来看,JavaScript函数和参数的声明只是内容。
如果您希望能够从javascript遍历ViewModel中的名称,那么您可以将ViewModel转换为JSON对象:
var nameListJson = @(Html.Raw(Json.Encode(Model)));
function nameBoxOperations(name)
{
for (i = 0; i < nameListJson.length; i++) {
console.log( nameListJson[i] );
}
}
我已经展示了一个循环,但是无论您需要做什么,现在都可以访问模型中的数据。你只需要在循环和访问模型时使用javascript。
如果您查看所检索页面的内容,您将看不到Razor。相反,您将看到一个内联JSON对象。
这是一个相当非常规的方法。根据您的应用程序,可能有更好的方法。根据你的问题,听起来你可能应该花更多的时间在教程和例子上,看看哪些是更常见的做法。这些将使您更好地了解MVC是如何工作的,以及构建应用程序的一些知识块。
当在c#代码块中使用Javascript时,您应该在每行的开头使用@:
您可以使用以下代码:
@model IEnumerable<Contact>
<script>
var name = document.getElementById("nameBox").value;
function nameBoxOperations(name) {
@foreach (var names in @Model)
{
@:if (names.givenName == name)
{
@:alert('name matched');
//OPERATIONS
}
}
}
</script>
你把JS和c#混在一起了,这是没有完成的。错误一定会发生。简单的解决方案是为您输入更多使用Ajax的JS代码(例如通过jQuery,这比JS的Ajax编码更直接)将数据获取到另一个JS变量中,如数组或其他东西。然后你就可以循环了。你必须学习一些jQuery才能做到这一点。