C# 如何使用Razor代替jQueryAjax从函数中获取数据
我从不在asp.NETMVC中使用Razor,所以我真的不知道它是如何工作的。 每次我想在我的控制器中标记一个函数时,我都会使用jqueryajax,我会编写非常复杂的javascript代码,我的项目非常混乱。 现在我想做些不同的事情 我有一个名为HomeController的控制器,在这里我使用模型实体从SQLServer数据库获取数据C# 如何使用Razor代替jQueryAjax从函数中获取数据,c#,asp.net-mvc,jquery,asp.net-mvc-4,razor,C#,Asp.net Mvc,Jquery,Asp.net Mvc 4,Razor,我从不在asp.NETMVC中使用Razor,所以我真的不知道它是如何工作的。 每次我想在我的控制器中标记一个函数时,我都会使用jqueryajax,我会编写非常复杂的javascript代码,我的项目非常混乱。 现在我想做些不同的事情 我有一个名为HomeController的控制器,在这里我使用模型实体从SQLServer数据库获取数据 public class HomeController : Controller { public JsonResult getClasses()
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);
}
}
我有一个名为SiteMaster的master.page,在这里我通过jQueryAjax获取这些数据
我有另一个ajax,用于在单击某个类时获取类型。但所有这些我都想更改,以便可以使用@Razor
我只想将GetClass中的数据显示到母版页中,当单击某个类时,将该参数发送到GetTypessString className中,但不使用javascript和@Razor。
所以我的问题是,我可以这样做吗?如何做?您不需要使用ajax来加载初始母版页,只需返回一个包含所有需要显示的类数据的视图,这样就可以节省到服务器的额外行程。至于在单击类时获取数据,这是使用Ajax的理想场所,在Razor中,您可以使用@Ajax.xxx helpers@Ajax.RawActionLink、@Ajax.BeginForm等等。。下面的链接可能是了解如何在asp.net MVC中使用视图的好地方将GetClass的结果发送到视图的第一部分可以单独使用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>
对于第二部分,当点击链接时获取类型,你就不走运了。点击必须发生在客户机上,因此,到那时,您的C将被评估,HTML将被刷新,运行Razor的时间也将过去。如果这些类型没有以某种方式缓存在页面上,那么您将不得不再次向服务器发出请求,AJAX就是一种方法
@{
// 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>