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



我正在尝试将级联下拉列表添加到我的网站上的页面中。我遵循了上的示例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与cshtml文件位于同一文件夹中,cshtml文件包含我试图控制的JS代码、HTML下拉列表等。有人能告诉我上面的代码是否引用了"隔壁"的文件吗?如果没有,我应该修改上面的代码行吗?

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

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

并在JS:中调用

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

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

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

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

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

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

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

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

如果上面的代码在剃刀视图中,它就会工作。如果您的代码位于扩展javascript文件中,请使用本文中介绍的解决方案。

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

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

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

相关内容

  • 没有找到相关文章

最新更新