如何使用Razor代替Jquery ajax从函数中获取数据

本文关键字:函数 获取 数据 ajax 何使用 Razor 代替 Jquery | 更新日期: 2023-09-27 18:15:13

我从来没有使用Razorasp.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。我的问题是,我能做到吗?怎么做?

如何使用Razor代替Jquery ajax从函数中获取数据

第一部分(将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视图教程中使用视图