我应该如何从 javascript/jquery 调用 cshtml 文件?

How should I call a cshtml file from javascript/jquery?

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

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

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

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

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

在理想情况下,我可以使用 Razor 波浪号 (~) 来强制显示正确的完整路径,无论使用服务器版本还是本地主机。但这似乎不是 JavaScript.

中的一个选项

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

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

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

并在 JS 中调用它:

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

您不会直接访问 razor 视图,您将通过操作方法访问它。

我认为问题是您得到了 404,因为路径不正确。如果您打开浏览器控制台,您应该能够看到 404 错误。

使用 Url.Action html 辅助方法生成正确的操作方法相对路径。

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

当 razor 视图引擎执行此视图时,它将调用辅助方法并将该方法调用的输出(这是操作方法的正确相对路径)用于 javascript 变量。无论您当前的page/url.

如何,此解决方案都将起作用

假设您有一个名为 GetClients 的操作方法,它接受一个 ID 和 return 个 JSON 格式的客户端。

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

如果在 razor 视图中,上面的代码将起作用。如果您的代码位于外部 javascript 文件中,请使用此 .

中解释的解决方案

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

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

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