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

时间:2016-04-11 17:02:34

标签: javascript jquery razor webmatrix-3

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

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

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

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

没有找到正确的文件夹。

在一个理想的世界中,无论使用服务器版本还是localhost,我都可以使用Razor代字号(〜)强制显示正确的完整路径。但这似乎不是JavaScript中的一个选项。

GetClients.cshtml与包含我正在尝试控制的JS代码,HTML下拉列表等的cshtml文件位于同一文件夹中。有人能让我知道上面的代码是否引用了“隔壁”的文件,如果没有,我应该修改上面的代码行?

3 个答案:

答案 0 :(得分:1)

您无法直接从Javascript调用视图,这就是为什么只需在ASP.NET MVC Controller中创建返回该视图的Action。

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

并在JS中调用它:

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

答案 1 :(得分:1)

您无法直接访问剃刀视图,您将通过操作方法访问它。

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

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

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

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

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

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

如果上面的代码位于剃刀视图中,它将起作用。如果您的代码位于extenal javascript文件中,请使用此post中解释的解决方案。

答案 2 :(得分:0)

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

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

传递给getJSON方法的网址应为/folder/getclients以及您要传递的任何其他网址/查询字符串。