1

我正在尝试将级联下拉列表添加到我网站上的页面。我已经按照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 文件位于同一文件夹中。有人可以让我知道上面的代码是否引用了“隔壁”的文件,如果没有,我应该修改上面的代码行吗?

4

3 回答 3

1

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

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

并在 JS 中调用它:

 $.get("/my/GetMyCoolCshtmlFile").done(function(yourMarkup){doWhatYouWantWithYourMarkup(yourMarkup);})
于 2016-04-11T17:07:56.207 回答
1

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

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

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

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 
}

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

于 2016-04-11T17:11:03.870 回答
0

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

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

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

于 2016-04-11T20:38:27.407 回答