我正在尝试将级联下拉列表添加到我的网站上的页面中。我遵循了上的示例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。