【问题标题】:How should I call a cshtml file from javascript/jquery?我应该如何从 javascript/jquery 调用 cshtml 文件?
【发布时间】:2016-04-11 17:02:33
【问题描述】:

我正在尝试将级联下拉列表添加到我网站上的页面。我已经按照http://www.mikesdotnetting.com/article/196/webmatrix-jquery-cascading-dropdown-lists 提供的示例进行了操作,唯一的变化是我已经更改了变量名称以适合我的应用程序,并且因为我只希望该功能在某些情况下存在(即创建新记录),所以有围绕相关代码的 if 语句。

虽然我的第二个下拉列表在页面加载时被禁用(如预期的那样),但当第一个下拉列表项之一被选中时它不会启用。

我的怀疑是我没有正确调用 GetClients.cshtml(我对 Mike 的 GetProducts.cshtml 的变体),可能是由于以下行:

$.getJSON('/GetClients/' + ActivityID, function (clients) {

没有在正确的文件夹中查找。

在理想情况下,我可以使用 Razor 波浪号 (~) 来强制生成一个看起来正确的完整路径,无论使用服务器版本还是 localhost。但这似乎不是 JavaScript 中的一个选项。

GetClients.cshtml 与包含我试图控制的 JS 代码、HTML 下拉列表等的 cshtml 文件位于同一文件夹中。有人可以告诉我上面的代码是否引用了“隔壁”的文件,如果没有,我应该修改上面的代码行吗?

【问题讨论】:

    标签: javascript jquery razor webmatrix-3


    【解决方案1】:

    您不能直接从 Javascript 调用视图,这就是为什么只需在 ASP.NET MVC 控制器中创建返回该视图的操作。

    public MyController{
       public ActionResult GetMyCoolCshtmlFile(){
          return View("pathToMyCoolCshtml.cshtml");
       }
    }
    

    并在 JS 中调用它:

     $.get("/my/GetMyCoolCshtmlFile").done(function(yourMarkup){doWhatYouWantWithYourMarkup(yourMarkup);})
    

    【讨论】:

      【解决方案2】:

      您不会直接访问剃刀视图,而是通过操作方法访问它。

      我认为问题在于您收到 404,因为路径不正确。如果您打开浏览器控制台,您应该可以看到 404 错误。

      使用Url.Action html 帮助器方法来为您的操作方法生成正确的相对路径。

      var url="@Url.Action("GetClients","YourcontrollerName")";    
      $.getJSON(url + ActivityID, function (clients) { });
      

      当 razor 视图引擎执行此视图时,它将调用辅助方法并将该方法调用的输出(即操作方法的正确相对路径)用于 javascript 变量。无论您当前的页面/网址如何,此解决方案都将起作用。

      假设您有一个名为 GetClients 的操作方法,它接受一个 id 并以 JSON 格式返回客户端。

      public ActionResult Getclients(int id)
      {
        // to do  : Return a list of Clients as json 
      }
      

      如果上面的代码在 razor 视图中,它将起作用。如果您的代码位于外部 javascript 文件中,请使用此 post 中说明的解决方案。

      【讨论】:

      • 谢谢你,但你的回答似乎假设我正在使用 Visual Studio 和 MVC。我不是。我正在使用 WebMatrix,我没有根据 MVC 原则拆分我的页面。您的第一个建议看起来可行,但是由于我认为我没有“控制器”,因此我正在努力找出应该用作“您的控制器名称”的内容。你能帮我解决这个问题吗?
      • 将您的控制器名称替换为您拥有 Getclients 方法的控制器名称。
      • 好的,我为自己的愚蠢道歉,但是控制器名称是什么?
      • 我建议你学习asp.net mvc的基础知识。从这里开始asp.net/mvc/overview/getting-started/introduction/…
      • 我对在 WebMatrix 中使用 Razor 的非 MVC ASP.NET 网页的决定感到非常满意,因此学习 ASP.NET MVC 的基础知识将不值得花时间目前。
      【解决方案3】:

      如果您的 GetClients.cshtml 文件位于根目录下的文件夹中,则需要将该文件夹包含在您传递给 getJSON 方法的 URL 中。例如,假设你的结构是这样的:

      root
          folder
              GetClients.cshtml
              CallingPage.cshtml
          Default.cshtml
          etc
      

      您传递给 getJSON 方法的 url 应该是 /folder/getclients 加上您想要传递的任何其他 URLData/querystrings。

      【讨论】:

      • 谢谢迈克!我可以礼貌地建议你在你的博客页面上添加一点评论吗?我见过很多人对为什么他们的代码版本不起作用感到困惑,我怀疑这是因为他们像我一样盲目地追随你写的东西。 (顺便说一句,我已将您的答案打勾为正确的答案,但只有在我获得一些积极的声誉时才会显示出来。)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-10
      相关资源
      最近更新 更多