如何使用Razor代替Jquery ajax从函数中获取数据
本文关键字:函数 获取 数据 ajax 何使用 Razor 代替 Jquery | 更新日期: 2023-09-27 18:15:13
我从来没有使用Razor在asp.net MVC所以我真的不知道它是如何工作的。每次我想在我的控制器标记一个函数时,我使用jquery ajax,我写了非常javascript代码,我的项目非常混乱。现在我想做点不一样的。
我有控制器命名为HomeController
,我从Sql Server数据库获取数据,使用模型实体。
public class HomeController : Controller
{
public JsonResult getClasses()
{
IList<Class> classes = (from x in db.Class select x).Distinct().ToList();
return Json(classes, JsonRequestBehavior.AllowGet);
}
public JsonResult getTypes(string className)
{
IList<String> allTypes = (from type in db.Type
where type.class_name == className
orderby type.type_name
select type.type_name).Distinct().ToList();
return Json(allTypes, JsonRequestBehavior.AllowGet);
}
}
还有master。页面(命名为SiteMaster),我得到这个数据通过jquery ajax
<body>
<div id="header">
<ul class="classesName"></ul>
</div>
</body>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
url: "/Home/getClasses",
type: "GET",
data: {},
success: function (result) {
for (n = 0; n < result.length; n++) {
$('.classesName').append('<li><a href="#" onclick="showTypes( ''' + result[n].class_name + ''')" >' + result[n].class_name + '</a></li>');
}
}
});
</script>
我有另一个ajax获取类型当一些类被点击..但这一切我想改变,所以我可以使用@Razor。
所有我想要的是显示数据从getClasses()
到母版,当一些类被点击,发送该参数到getTypes(string className)
但没有使用javascript和使用@Razor。我的问题是,我能做到吗?怎么做?
第一部分(将getClasses()
的结果发送到您的视图)可以单独使用Razor完成,因为所有的工作都可以在服务器上完成。
重要的是要理解Razor的主要优势是它允许你在视图上执行(几乎,如果不是)任何c#。因此,做你想做的事情可以像写代码一样简单,就像你在c#中编码一样:
@{
// I'd suggest you refactor your code to have your `getClasses()` function
// readily available somewhere that's not a controller
var classes = Data.getClasses();
}
<div id="header">
<ul class="classesName">
@foreach (var clazz in classes) {
<li>
<a href="#" onclick="showTypes('@clazz')">@clazz</a>
</li>
}
</ul>
</div>
对于第二部分(单击链接时获得Types
),您就不那么幸运了。点击必须发生在客户端,所以到那时你的c#将被评估,HTML将刷新,而你的Razor运行的时间将会来了又去。如果这些类型没有以某种方式缓存在页面上,则必须再次向服务器发出请求(AJAX是一种方法)。
您不需要使用ajax来加载初始母版页,只需返回一个包含需要显示的所有类数据的视图,因为这样可以节省到服务器的额外旅程。至于在点击类时获取数据,这是使用Ajax的理想场所,在Razor中,您可以使用许多@Ajax中的一个。xxx助手(@Ajax。RawActionLink @Ajax。BeginForm,等等)。下面的链接可能是一个很好的地方,看看如何在asp.net MVC视图教程中使用视图